挺有意思的,练练我这个鶸的思维
题目理解的话大概意思就是给你一个数列,不改变排序的情况下,问你子序列里面,最短的,能包括所有出现的数字的连续子序列的最短长度是多少。用尺取法。用cin会超时
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<map>
#include<set>
using namespace std;
int a[1000500];
int main()
{
int p;
set<int> se;
scanf("%d",&p);
for(int i=0;i<p;i++)
{
scanf("%d",&a[i]);
se.insert(a[i]);
}
int n=se.size();
map<int,int> count;
int t=0;
int ans=p;
int num=0;
int s=0;
for(;;)
{
while(num<n&&t<p)
{
if(count[a[t++]]++==0)
num++;
}
if(num<n)
break;
ans=min(ans,t-s);
if(--count[a[s++]]==0)
num--;
}
printf("%d\n",ans);
return 0;
}