社区讨论
求助 ABC d
灌水区参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @m6m92st6
- 此快照首次捕获于
- 2025/02/01 21:50 去年
- 此快照最后确认于
- 2025/11/04 10:06 4 个月前
WA 了 19 个点
思路就是预处理,将方块分层,第 层由每一列的从下往上第 个方块组成,每一层被消除的时间就是这一层最高方块的 坐标。处理完答案之后
回答询问即可。
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 条回复,欢迎继续交流。
正在加载回复...