社区讨论

求助 ABC d

灌水区参与者 1已保存回复 0

讨论操作

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

当前回复
0 条
当前快照
1 份
快照标识符
@m6m92st6
此快照首次捕获于
2025/02/01 21:50
去年
此快照最后确认于
2025/11/04 10:06
4 个月前
查看原帖
WA 了 19 个点
思路就是预处理,将方块分层,第 ii 层由每一列的从下往上第 ii 个方块组成,每一层被消除的时间就是这一层最高方块的 yy 坐标。处理完答案之后 O(1)O(1) 回答询问即可。
CPP
#include <bits/stdc++.h>

using namespace std;
using PII = pair<int, int>;

const int kN = 2e5 + 7;

int n, w, q, cnt[kN], ans[kN];
PII a[kN], b[kN];

int main() {
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    cin >> n >> w;
    for (int i = 1, x, y; i <= n; i++) {
        cin >> x >> y, a[i] = {x, y};
        b[i] = {++cnt[x], i}, ans[i] = 2e9;
    }
    sort(b + 1, b + n + 1);
    for (int i = 1, j, mx = 0; i <= n; mx = 0, i = j) {
        if (n - i + 1 < w) break;
        for (j = i; j <= i + w - 1; j++) mx = max(mx, a[b[j].second].second);
        for (int k = i; k < j; k++) ans[b[k].second] = mx;
    }
    cin >> q;
    for (int i = 1, t, x; i <= q; i++) {
        cin >> t >> x;
        cout << (t >= ans[x] ? "No" : "Yes") << '\n';
    }

    return 0;
}

回复

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

正在加载回复...