题意:n页书,然后n个数表示各个知识点ai,然后,输出最小覆盖的页数。
#include<iostream> #include<cstdio> #include<set> #include<map> using namespace std; const int maxn = 1e6 + 5; int num[maxn]; int main(){ int n; set<int>ss; map<int, int>mm; scanf("%d", &n); for (int i = 0; i < n; ++i)scanf("%d", &num[i]), ss.insert(num[i]); int max = ss.size(); int st = 0, en = 0, sum=0,len=maxn+1; while (1){ while (sum < max&&en < n){ if (mm[num[en++]]++ == 0)sum++; } if (sum < max)break; len = len < (en - st) ? len : (en - st); if (--mm[num[st++]] == 0)sum--; } printf("%d ", len); }