Jessica's Reading Problem POJ - 3320(尺取法2)
阿新 • • 發佈:2018-11-05
題意: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 (inti = 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\n", len); }