萌新样例没过但是a了,连substack都a了,求大佬解释……
  • 板块灌水区
  • 楼主封禁用户ZZZ
  • 当前回复4
  • 已保存回复4
  • 发布时间2022/7/18 22:45
  • 上次更新2023/10/27 19:38:23
查看原帖
萌新样例没过但是a了,连substack都a了,求大佬解释……
603435
封禁用户ZZZ楼主2022/7/18 22:45

P7424 [THUPC2017] 天天爱射击

萌新学整体二分,wa掉后听LZY大佬提醒将值域右边界加了一,但是样例就wa了。可是我这么一试,竟然AC了?!?连hack都过了?!?求助各位大佬帮忙看看哪里的问题…………

#include <bits/stdc++.h>

struct Query {
	int l, r, x, id;
} q[400005], q1[400005], q2[400005];
int n, m, ans[200005], tr[200005];
void add(int x, int v) {
	for (; x <= m; x += x & -x) tr[x] += v;
}
int query(int x) {
	int res = 0;
	for (; x; x -= x & -x) res += tr[x];
	return res;
}
void solve(int l, int r, int L, int R) {
	if (L > R) return ;
	if (l == r) {
		for (int i = L; i <= R; i++) {
			if (!q[i].id) {
				ans[l]++;
			}
		}
		return ;
	}
	int mid = (l + r) / 2, sz1 = 0, sz2 = 0;
	for (int i = L; i <= R; i++) {
		if (q[i].id) {
			if (q[i].id <= mid) add(q[i].x, 1), q1[++sz1] = q[i];
			else q2[++sz2] = q[i];
		}
		else {
			int tmp = query(q[i].r) - query(q[i].l - 1);
			if (q[i].x <= tmp) q1[++sz1] = q[i];
			else q[i].x -= tmp, q2[++sz2] = q[i];
		}
	}
	for (int i = L; i <= R; i++) {
		if (q[i].id && q[i].id <= mid) {
			add(q[i].x, -1);
		}
	}
	for (int i = L; i <= R; i++) {
		if (i - L + 1 <= sz1) q[i] = q1[i - L + 1];
		else q[i] = q2[i - L - sz1 + 1];
	}
	solve(l, mid, L, L + sz1 - 1), solve(mid + 1, r, L + sz1, R);
}

int main() {
	scanf("%d %d", &n, &m);
	for (int i = 1; i <= n; i++) scanf("%d %d %d", &q[m + i].l, &q[m + i].r, &q[m + i].x);
	for (int i = 1; i <= m; i++) scanf("%d", &q[i].x), q[i].id = i;
	solve(1, m + 1, 1, n + m);
	for (int i = 1; i <= m; i++) printf("%d\n", ans[i]);
	return 0;
}

STO sto LZY AK IOI JF orz OTZ

2022/7/18 22:45
加载中...