水题笔记

9.24

[USACO13JAN]牛的阵容Cow Lineup【区间伸缩法】

#include <cstdio>
#include <algorithm>

using namespace std;

const int N = 100005;
int a[N], b[N], buc[N], cnt, ans, n, k;

int main() {
    scanf("%d%d", &n, &k);
    for (int i = 1; i <= n; ++i) scanf("%d", &a[i]), b[i] = a[i];
    std::sort(b + 1, b + n + 1);
    for (int i = 1; i <= n; ++i) a[i] = lower_bound(b + 1, b + n + 1, a[i]) - b;
    for (int l = 1, r = 1; r <= n; ++r) {
        cnt += (buc[a[r]] == 0);
        while (cnt > k + 1) {
            ans = max(ans, buc[a[l]]);
            cnt -= (buc[a[l]] == 1);
            --buc[a[l]], ++l;
        }
        ++buc[a[r]];
    }
    for (int i = 1; i <= n; ++i) ans = max(ans, buc[i]);
    printf("%d\n", ans);
    return 0;
}
P3069

猜你喜欢

转载自www.cnblogs.com/milky-w/p/9696448.html