贪心做法
从前往后扫,遇到出现过的就记录下来,重新往后扫
思想:后面留下的串越长,越有可能划分成更多的串
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;
}