/* poj 3320
* 尺取法
* 2014-8-12
*
*/
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <map>
#include <set>
using namespace std;
#define MAX_N 1000000
int N;
int a[MAX_N];
void solve(){
set<int> all;
for(int i = 0;i < N; i++){
all.insert(a[i]);
}
int n = all.size();
//尺取法
int s = 0, t = 0, num = 0;
map<int , int> count; //知识点->出现次数
int res = N;
for(;;){
while(t < N && num < n){
if(count[a[t++]]++ == 0){
//出现新的知识点
num++;
}
}
if(num < n) break;
res = min(res, t - s);
if(--count[a[s++]] == 0){
//某个知识点为0
num--;
}
}
printf("%d\n", res);
}
int main(){
scanf("%d", &N);
memset(a, 0 , sizeof(a));
for(int i = 0;i < N; i++){
scanf("%d", &a[i]);
}
solve();
return 0;
}
poj3320 Jessica's Reading Problem
最新推荐文章于 2019-03-06 20:34:07 发布
