洛谷 P2574 XOR的艺术(xor)
来源:互联网 发布:电脑网络号怎么算 编辑:程序博客网 时间:2024/06/08 15:39
题目描述
AKN觉得第一题太水了,不屑于写第一题,所以他又玩起了新的游戏。在游戏中,他发现,这个游戏的伤害计算有一个规律,规律如下
1、 拥有一个伤害串为长度为n的01串。
2、 给定一个范围[l,r],伤害为伤害串的这个范围内中1的个数
3、 会被随机修改伤害串中的数值,修改的方法是把[l,r]中的所有数xor上1
AKN想知道一些时刻的伤害,请你帮助他求出这个伤害
输入输出格式
输入格式:第一行两个数n,m,表示长度为n的01串,有m个时刻
第二行一个长度为n的01串,为初始伤害串
第三行开始m行,每行三个数p,l,r
若p为0,则表示当前时刻改变[l,r]的伤害串,改变规则如上
若p为1,则表示当前时刻AKN想知道[l,r]的伤害
输出格式:对于每次询问伤害,输出一个数值伤害,每次询问输出一行
输入输出样例
输入样例#1:
10 610111010010 2 41 1 50 3 71 1 100 1 41 2 6
输出样例#1:
361
说明
样例解释:
1011101001
1100101001
询问[1,5]输出3
1111010001
询问[1,10]输出6
0000010001
询问[2,6]输出1
数据范围:
10%数据2≤n,m≤10
另有30%数据2≤n,m≤2000
100%数据2≤n,m≤2*10^5
By:worcher
基本线段树
#include<iostream>#include<cstdio>using namespace std;const int maxn=200005;int n,m;char ch[maxn];struct node{ int l,r,sum,tag;}a[4*maxn];void build(int num,int l,int r){ a[num].l=l,a[num].r=r; if(l==r) { a[num].sum=ch[a[num].l]-'0'; return ; } int mid=(l+r)/2; build(2*num,l,mid); build(2*num+1,mid+1,r); a[num].sum=a[2*num].sum+a[2*num+1].sum;}void update(int num){ if(a[num].l!=a[num].r) { a[2*num].sum=a[2*num].r-a[2*num].l+1-a[2*num].sum; a[2*num].tag^=1; a[2*num+1].sum=a[2*num+1].r-a[2*num+1].l+1-a[2*num+1].sum; a[2*num+1].tag^=1; } a[num].tag=0;}void change(int num,int x,int y){ if(a[num].l>=x&&a[num].r<=y) { a[num].sum=a[num].r-a[num].l+1-a[num].sum; a[num].tag^=1; return ; } if(a[num].l>y||a[num].r<x) return ; if(a[num].tag!=0) update(num); change(2*num,x,y),change(2*num+1,x,y); a[num].sum=a[2*num].sum+a[2*num+1].sum;}int query(int num,int x,int y){ if(a[num].l>=x&&a[num].r<=y) return a[num].sum; if(a[num].l>y||a[num].r<x) return 0; if(a[num].tag!=0) update(num); return query(2*num,x,y)+query(2*num+1,x,y);}int main(){ scanf("%d%d%s",&n,&m,ch+1); build(1,1,n); while(m--) { int k,x,y; scanf("%d%d%d",&k,&x,&y); if(k==0) change(1,x,y); else printf("%d\n",query(1,x,y)); } return 0;}
0 0
- 洛谷 P2574 XOR的艺术(xor)
- 洛谷 P2574 XOR的艺术
- 洛谷P2574 XOR的艺术
- Luogu-2574 XOR的艺术
- xor
- XOR ^
- xor
- xor
- xor
- 神奇的XOR
- 基于XOR的加密程序
- xor的性质和运算
- 找出丢失的数字 (XOR)
- xor eax, ebp的问题
- hdu 3949 Xor (高斯消元解决xor问题)
- HDOJ 3949 XOR (高斯消元 + XOR线性基)
- Uva 12716-GCD XOR(数论,枚举,xor)
- LS 2 Xor(数论)
- [深入分析Java Web技术内幕]1,DNS解析
- HTTP协议分析系列(一)------初识HTTP协议
- The requested resource is not available
- 23个常用的文件处理方法
- form表单提交后弹框提示
- 洛谷 P2574 XOR的艺术(xor)
- 深入理解Java Proxy机制
- centos 解压安装mysql
- C#项目打包成exe
- eclipse无法打断点,提示debug absent line number information
- 离线升级redhat6.5内核,2.6->3.10
- 自然语言处理学习路线图
- 剑指offer之用两个栈实现队列
- HTTP协议分析系列(二)------HTTP请求信息和相应信息的格式