P5057 [CQOI2006]简单题

 

链接:P5057 [CQOI2006]简单题

----------------------------------

其实这道题是树状数组的模板题

---------------------------------

看一下题意,如果用树状数组,我们很容易想到差分数组。但是一般的差分数组是不行的

---------------------------------

因为只有零和一,所以对于每一次操作,实就是让它在0和1中循环。而且,很容易得到,对于一个点进行了奇数次操作,他就会被改变,而偶数次操作就不变,知道了这点,我们就可以用树状数组去维护了

-----------------------------------

 

 1 #include<iostream>
 2 #include<cstdio>
 3 using namespace std;
 4 int t[1000001];
 5 int f;
 6 int n,m;
 7 int x;int y;
 8 int lowbit(int x){
 9     return x & -x;
10 }
11 int sum(int x){
12     int ans=0;
13     while(x){
14         ans+=t[x];
15         x-=lowbit(x);
16     }
17     return ans;
18 }
19 void add(int k,int x){
20     while(k<=n){
21         t[k]+=x;
22         k+=lowbit(k);
23     }
24     return ;
25 }
26 int main(){
27     cin>>n>>m;
28     for(int i=1;i<=m;++i){
29         cin>>f;
30         if(f==1){
31             cin>>x>>y;
32             add(x,1);
33             add(y+1,-1);
34         }
35         else
36         {
37             cin>>y;
38             cout<<sum(y)%2<<endl;
39             }    
40     }
41     return 0;
42 }
Ac

 

转载于:https://www.cnblogs.com/For-Miku/p/11248959.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值