読者です 読者をやめる 読者になる 読者になる

PKU3320

#include<iostream>
#include<map>
#include<set>
using namespace std;

int P;

int main(){
	cin >> P;
	int a[P];
	set<int> all;
	for(int i = 0; i < P;i++){
		cin >> a[i];
		all.insert(a[i]);
	}
	int n = all.size();
	int s = 0, t = 0, ph = 0;
	map<int, int> count; //事柄→出現数の対応
	int res = P;
	while(true){
		while(t < P && ph < n){
			if(count[a[t++]]++ == 0){
				ph++;
			}
		}
		if(ph < n)break;
		res = min(res, t - s);
		if(--count[a[s++]] == 0){
			ph--;
		}
	}
	cout << res << endl;
	return 0;
}