1. 程式人生 > >Jessica's Reading Problem POJ - 3320(尺取法2)

Jessica's Reading Problem POJ - 3320(尺取法2)

題意: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\n", len); }