LOJ 10117「一本通 4.1 练习 2」简单题 (树状数组)
题目链接:
区间修改+单点查询,用树状数组维护差分数组,从而记录每个点反转的次数。最后单点查询点反转的次数%2即为应得值。
#include <bits/stdc++.h>
using namespace std;
#define lowbit(x) ((x) & -(x))
const int N = 100005;
int tree[N], b[N];
int n, m;
void add(int x, int d)
{
while (x <= n)
{
tree[x] += d;
x += lowbit(x);
}
}
int sum(int x)
{
int sum = 0;
while (x)
{
sum += tree[x];
x -= lowbit(x);
}
return sum;
}
int main()
{
scanf("%d%d", &n, &m);
for (int i = 1; i <= m; i++)
{
int t, x, y;
scanf("%d", &t);
if (t == 1)
{
scanf("%d%d", &x, &y);
add(x, 1);
add(y + 1, -1);
}//区间修改
else
{
scanf("%d", &x);
printf("%d\n", sum(x) % 2);
}
}
return 0;
}