比赛 树状数组练习 评测结果 WWWWWWWWWW
题目名称 人工湖 最终得分 0
用户昵称 对立猫猫对立 运行时间 0.210 s
代码语言 C++ 内存使用 4.05 MiB
提交时间 2025-06-11 19:41:51
显示代码纯文本
#include <bits/stdc++.h>
#define Tairitsu return 0;
#define lowbit(x) (x & -x)
using namespace std;
int n, m;
int f, a, b;
int road[1000005], def[1000005];
void add(int x, int y) {
	for (; x <= n; x += lowbit(x)) road[x] += y;
}
int ask(int x) {
	int ans = 0;
	for (; x; x -= lowbit(x)) ans += road[x];
	return ans;
}
int main() {
	freopen("lakee.in","r",stdin);
	freopen("lakee.out","w",stdout);
	scanf("%d %d", &n, &m);
	for (int i = 1; i <= n; i++) {
		add(i, 1);
		def[i] = 1;
	}
	for (int i = 1; i <= m; i++) {
		scanf("%d%d%d", &f, &a, &b);
		switch (f) {
			case 0:
				if (def[a]) add(a, -1), def[a] = 0;
				else add(a, 1), def[a] = 1;
				break;
			case 1:
				int dist1 = ask(b - 1) - ask(a - 1);
				int dist2 = ask(n) - ask(b - 1) + ask(a - 1);
				if (dist1 != b - a + 1 && dist2 != n - (b - a + 1)) printf("YES\n");
				else printf("NO\n");
				break;
		}
	}
	Tairitsu
}