题目链接:http://codeforces.com/problemset/problem/620/C
题意:给出一个n大小的序列,截取一段,如果这一段有2个相同的数字,那么就是好的子序列,问最多有几个好子序列
思路:从头开始遍历,碰到第一个出现2次的数字就把这段数字截取,我感觉第3个样例输出1 3,5 7应该也符合题意,但是wa了……注意的是LL要用map进行标记
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <map>
using namespace std;
map<int,int> M;
int s[300030];
int ansl[300030],ansr[300030];
int main()
{
int n;
while (scanf("%d",&n)!=EOF)
{
M.clear();
int num=0,ll=1;
for (int i=1;i<=n;i++)
{
scanf("%d",&s[i]);
if (M[s[i]]!=0)
{
ansl[num]=ll;
ansr[num++]=i;
ll=i+1;
M.clear();
}
else
M[s[i]]=1;
}
ansr[num-1]=n;
if (num)
printf("%d\n",num);
else
printf("-1\n");
for (int i=0;i<num;i++)
printf("%d %d\n",ansl[i],ansr[i]);
}
}