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);
}

猜你喜欢

转载自www.cnblogs.com/ALINGMAOMAO/p/9911727.html