#include <bits/stdc++.h>
#define ll long long
#define endl '\n'
#define INF 0x3f3f3f3f
using namespace std;
const int N = 1e5 + 10;
struct Tree
{
int l, r;
int sum;
} tr[N << 2];
int n, m;
void pushup(int u)
{
tr[u].sum = tr[u << 1].sum + tr[u << 1 | 1].sum;
}
void build(int u, int l, int r)
{
tr[u].l = l, tr[u].r = r;
if (l == r)
{
tr[u].sum = 0;
return;
}
int mid = l + r >> 1;
build(u << 1, l, mid);
build(u << 1 | 1, mid + 1, r);
pushup(u);
}
void modify(int u, int pos, int k)
{
if (tr[u].l == tr[u].r)
{
tr[u].sum += k;
return;
}
int mid = tr[u].l + tr[u].r >> 1;
if (pos <= mid)
modify(u << 1, pos, k);
else
modify(u << 1 | 1, pos, k);
pushup(u);
}
int query(int u, int l, int r)
{
if (tr[u].l >= l && tr[u].r <= r)
return tr[u].sum;
int mid = tr[u].l + tr[u].r >> 1;
int res = 0;
if (l <= mid)
res += query(u << 1, l, r);
if (r > mid)
res += query(u << 1 | 1, l, r);
return res;
}
int main()
{
cin >> n >> m;
build(1, 1, n);
int op, l, r, pos;
while (m--)
{
cin >> op;
if (op == 1)
{
cin >> l >> r;
modify(1, l, 1);
if (r + 1 <= n)//必须考虑这种情况,防止r+1超出数组最大长度
modify(1, r + 1, -1);
}
else
{
cin >> pos;
int cnt = query(1, 1, pos);
if (cnt % 2 == 0)
{
cout << 0 << endl;
}
else
cout << 1 << endl;
}
}
return 0;
}
F - 区间操作
于 2023-03-09 19:46:24 首次发布