P2574 XOR的艺术

很久之前就想挑战一下这道题了,线段树下传标记的入门题,跟区间加法下传标记类似。

#include<bits/stdc++.h>
#define N 1000005
#define LL long long
#define RE register
#define IN inline using namespace std; IN void in(int &x){
int flg=;RE char ch=getchar();x=;
for(;ch>''||ch<'';){if(ch=='-') flg=-;ch=getchar();}
for(;ch<=''&&ch>='';ch=getchar()) x=x*+ch-'';
x*=flg;
} struct node{
int l,r,w,f;
}tr[N];
int n,m,ans,X,tot;
int e[N]; IN void build(int k,int l,int r){
tr[k].l=l;tr[k].r=r;
if(l==r){
tr[k].w=e[l];
return;
}int mid=(l+r)/;
build(k*,l,mid);build(k*+,mid+,r);
tr[k].w=tr[k*].w+tr[k*+].w;
} IN void down(int k){
tr[k].f^=;
tr[k*].w=(tr[k*].r-tr[k*].l+)-tr[k*].w;
tr[k*+].w=(tr[k*+].r-tr[k*+].l+)-tr[k*+].w;
tr[k*].f^=;
tr[k*+].f^=;
} IN void ask_interval(int k,int l,int r){
int ll=tr[k].l,rr=tr[k].r,mid=(ll+rr)/;
if(ll>=l&&rr<=r){
ans+=tr[k].w;
return;
}if(tr[k].f) down(k);
if(l<=mid) ask_interval(k*,l,r);
if(r>mid) ask_interval(k*+,l,r);
tr[k].w=tr[k*].w+tr[k*+].w;
} IN void change_interval(int k,int l,int r){
int ll=tr[k].l,rr=tr[k].r,mid=(ll+rr)/;
if(ll>=l&&rr<=r){
tr[k].w=(rr-ll+)-tr[k].w;
tr[k].f^=;
return;
}if(tr[k].f) down(k);
if(l<=mid) change_interval(k*,l,r);
if(r>mid) change_interval(k*+,l,r);
tr[k].w=tr[k*].w+tr[k*+].w;
} int main()
{
in(n);in(m);
for(int i=;i<=n;i++)
scanf("%1d",&e[i]);
build(,,n);
while(m--){
int p,l,r;
in(p);in(l);in(r);
if(p==){
change_interval(,l,r);
}else {
ans=,ask_interval(,l,r);
printf("%d\n",ans);
}
}return ;
}

洛谷——P2574 XOR的艺术的更多相关文章

  1. 洛谷 P2574 XOR的艺术(线段树 区间异或 区间求和)

    To 洛谷.2574 XOR的艺术 题目描述 AKN觉得第一题太水了,不屑于写第一题,所以他又玩起了新的游戏.在游戏中,他发现,这个游戏的伤害计算有一个规律,规律如下 1. 拥有一个伤害串为长度为n的 ...

  2. 洛谷P2574 XOR的艺术

    题目描述 \(AKN\)觉得第一题太水了,不屑于写第一题,所以他又玩起了新的游戏.在游戏中,他发现,这个游戏的伤害计算有一个规律,规律如下 1. 拥有一个伤害串为长度为\(n\)的\(01\)串. 2 ...

  3. 洛谷 P2574 XOR的艺术

    刚刚学了,线段树,一道线段树入门题试试水 下面是题面 题目描述 AKN觉得第一题太水了,不屑于写第一题,所以他又玩起了新的游戏.在游戏中,他发现,这个游戏的伤害计算有一个规律,规律如下 1. 拥有一个 ...

  4. 洛谷P2574 XOR的艺术(线段树)——Chemist

    当线段树遇上无敌位运算! 还是老套路,线段树维护区间和,一个区间有几个"1"就是这个区间的区间和,同时支持区间修改区间查询,只不过操作从加法变成了异或.主要难点就在更新懒标记那里, ...

  5. 洛谷 2574 XOR的艺术

    [题解] 线段树维护区间中1的个数就好了.每次修改就打上标记并把区间的sum改为len-sum. #include<cstdio> #include<algorithm> #i ...

  6. 【洛谷】【线段树+位运算】P2574 XOR的艺术

    [题目描述:] AKN觉得第一题太水了,不屑于写第一题,所以他又玩起了新的游戏.在游戏中,他发现,这个游戏的伤害计算有一个规律,规律如下 1. 拥有一个伤害串为长度为n的01串. 2. 给定一个范围[ ...

  7. luogu P2574 XOR的艺术 (线段树)

    luogu P2574 XOR的艺术 (线段树) 算是比较简单的线段树. 当区间修改时.\(1 xor 1 = 0,0 xor 1 = 1\)所以就是区间元素个数减去以前的\(1\)的个数就是现在\( ...

  8. 【洛谷P2574】XOR的艺术

    XOR的艺术 题目链接 用线段树维护sum, 修改时 tag[p]^=1; sum=r-l+1-sum; 详见代码 #include<iostream> #include<cstdi ...

  9. P2574 XOR的艺术

    题目描述 AKN觉得第一题太水了,不屑于写第一题,所以他又玩起了新的游戏.在游戏中,他发现,这个游戏的伤害计算有一个规律,规律如下 1. 拥有一个伤害串为长度为n的01串. 2. 给定一个范围[l,r ...

随机推荐

  1. 22、Cocos2dx 3.0游戏开发找小三之音乐与音效:假如世界上没有了音乐,你的耳朵会孤单吗?

    重开发人员的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/30485103 假如世界上没有了音乐,在森林里.我们听 ...

  2. LeetCode 781. Rabbits in Forest (森林中的兔子)

    题目标签:HashMap 题目给了我们一组数字,每一个数字代表着这只兔子说 有多少只一样颜色的兔子. 我们把每一个数字和它出现的次数都存入map.然后遍历map,来判断到底有多少个一样颜色的group ...

  3. SoapUI在Jenkins中的配置

    Jenkins Label: windows_ws_test   已有Jenkins环境变量 %READYAPI_PRO_HOME%  - <D:\Program Files\SmartBear ...

  4. oc71--NSArray2

    // // Person.h #import <Foundation/Foundation.h> @interface Person : NSObject - (void)say; - ( ...

  5. bzoj 4590: [Shoi2015]自动刷题机

    好恶心.. 二分上界到100000LL*1000000000LL  %_% #include<cstdio> #include<iostream> #include<cs ...

  6. bzoj1297 [SCOI2009]迷路——拆点+矩阵快速幂

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1297 一看感觉是矩阵快速幂之类的,但边权不好处理啊: 普通的矩阵快速幂只能处理边权为1的,所 ...

  7. Android 数据库

    官方文档:https://developer.android.com/training/basics/data-storage/databases.html#WriteDbRow 原帖:http:// ...

  8. PCB CS架构(工程系统)实现单点登入方法

    社会的不断进步发展,分工也越来越细了.而我们工作接触的范围也越来越狭小了,但这不是倒退了,而是分工之细让人们在各个方面深耕细作.PCB企业软件系统发展路线同样也如此,随着我们PCB企业发展不断壮大,软 ...

  9. Eclipse设置空格代替tab

    1.点击 window->preference-,依次选择 General->Editors->Text Editors,选中右侧的 insert space for tabs;如下 ...

  10. HTML--使用单选框、复选框,让用户选择

    在使用表单设计调查表时,为了减少用户的操作,使用选择框是一个好主意,html中有两种选择框,即单选框和复选框,两者的区别是单选框中的选项用户只能选择一项,而复选框中用户可以任意选择多项,甚至全选.请看 ...