社区讨论

求卡常82分T10个点

P3512[POI 2010] PIL-Pilots参与者 3已保存回复 4

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@mljhy2wx
此快照首次捕获于
2026/02/12 21:30
3 周前
此快照最后确认于
2026/02/15 15:40
3 周前
查看原帖
CPP
#include <bits/stdc++.h>
using namespace std;

const int N = 3e6 + 5;
int K, n, a[N];
int mx[N << 2], mn[N << 2];
int M = 1;

static char buf[1 << 22], *p1 = buf, *p2 = buf;
#define gc() (p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1 << 22, stdin), p1 == p2) ? EOF : *p1++)
inline int read() {
    int x = 0, f = 1; char c = gc();
    while(c < '0' || c > '9') { if(c == '-') f = -1; c = gc(); }
    while(c >= '0' && c <= '9') { x = x * 10 + (c & 15); c = gc(); }
    return x * f;
}
inline void write(int x) {
    if(x < 0) { putchar_unlocked('-'); x = -x; }
    if(x > 9) write(x / 10);
    putchar_unlocked(x % 10 + '0');
}

inline void build() {
    while(M < n) M <<= 1;
    for(int i = 1; i <= n; ++i) mx[M + i - 1] = mn[M + i - 1] = a[i];
    for(int i = M - 1; i; --i) {
        mx[i] = max(mx[i << 1], mx[i << 1 | 1]);
        mn[i] = min(mn[i << 1], mn[i << 1 | 1]);
    }
}
inline int qmax(int l, int r) {
    int ans = 0x80000000; // INT_MIN
    for(l += M - 1, r += M - 1; l <= r; l >>= 1, r >>= 1) {
        if(l & 1) ans = max(ans, mx[l++]);
        if(!(r & 1)) ans = max(ans, mx[r--]);
    }
    return ans;
}
inline int qmin(int l, int r) {
    int ans = 0x7fffffff;
    for(l += M - 1, r += M - 1; l <= r; l >>= 1, r >>= 1) {
        if(l & 1) ans = min(ans, mn[l++]);
        if(!(r & 1)) ans = min(ans, mn[r--]);
    }
    return ans;
}

inline bool check(int len) {
    int limit = n - len + 1;
    for(int i = 1; i <= limit; ++i) {
        if(qmax(i, i + len - 1) - qmin(i, i + len - 1) <= K)
            return true;
    }
    return false;
}

int main() {
    K = read(); n = read();
    for(int i = 1; i <= n; ++i) a[i] = read();
    build();

    int l = 1, r = n, ans = 1;
    while(l <= r) {
        int mid = (l + r) >> 1;
        if(check(mid)) ans = mid, l = mid + 1;
        else r = mid - 1;
    }
    write(ans);
    return 0;
}
拒绝使用正解。

回复

4 条回复,欢迎继续交流。

正在加载回复...