CodeForces

来源:互联网 发布:学案例 明底线 知敬畏 编辑:程序博客网 时间:2024/06/11 05:05

贪心做法 

从前往后扫,遇到出现过的就记录下来,重新往后扫

思想:后面留下的串越长,越有可能划分成更多的串


ps : 开始看错题意了,以为是 以同样的数划分,那样的话就是出现次数最多的数划分


#include<iostream>#include<algorithm>#include<cstdio>#include<cstdlib>#include<cstring>#include<string>#include<cmath>#include<set>#include<queue>#include<stack>#include<map>#define PI acos(-1.0)#define in freopen("in.txt", "r", stdin)#define out freopen("out.txt", "w", stdout)using namespace std;typedef long long ll;typedef unsigned long long ull;const int maxn = 1e6 + 7, maxd = 1e4 + 7, mod = 1e9 + 7;const ll INF = 0x7f7f7f7f;int n;set<int> st;struct edge {    int l_, r_;}e[maxn];int main() {    scanf("%d", &n);    int cnt = 0;    for(int i = 1; i <= n; ++i) {        int x; scanf("%d", &x);        if(st.empty()) {            st.insert(x);            e[cnt].l_ = i;        }        else if(st.count(x)) {            st.clear();            e[cnt++].r_ = i;        }        else {            st.insert(x);        }    }    if(cnt == 0) puts("-1");    else {        e[cnt-1].r_ = n;        cout << cnt << endl;        for(int i = 0; i < cnt; ++i)            printf("%d %d\n", e[i].l_, e[i].r_);    }    return 0;}


原创粉丝点击