【洛谷P2574】XOR的艺术
XOR的艺术
用线段树维护sum,
修改时
tag[p]^=1;
sum=r-l+1-sum;
详见代码
#include<iostream>
#include<cstdio>
using namespace std;
#define N 800010
#define lc(p) (p<<1)
#define rc(p) (p<<1|1)
#define mid ((l+r)>>1)
int n,m,sum[N],dealta[N],cnt;
char s[N>>];
inline int read(){
int x=; char c=getchar();
while(c<''||c>'') c=getchar();
while(''<=c&&c<='') { x=(x<<)+(x<<)+c-''; c=getchar(); }
return x;
} void push_up(int p){
sum[p]=sum[lc(p)]+sum[rc(p)];
} void build(int p=,int l=,int r=n){
if(l==r){
sum[p]=s[++cnt]-'';
return;
}
build(lc(p),l,mid);
build(rc(p),mid+,r);
push_up(p);
} void f(int p,int l,int r){
dealta[p]^=;
sum[p]=r-l+-sum[p];
} void push_down(int p,int l,int r){
if(dealta[p]){
f(lc(p),l,mid);
f(rc(p),mid+,r);
dealta[p]=;
}
} void update(int L,int R,int p=,int l=,int r=n){
if(L<=l&&r<=R){
dealta[p]^=;
sum[p]=r-l+-sum[p];
return;
}
push_down(p,l,r);
if(L<=mid) update(L,R,lc(p),l,mid);
if(R>mid) update(L,R,rc(p),mid+,r);
push_up(p);
} int query(int L,int R,int p=,int l=,int r=n){
if(L<=l&&r<=R){
return sum[p];
}
push_down(p,l,r);
int ans=;
if(L<=mid) ans+=query(L,R,lc(p),l,mid);
if(R>mid) ans+=query(L,R,rc(p),mid+,r);
push_up(p);
return ans;
} int main()
{
scanf("%d%d",&n,&m);
scanf("%s",s+);
build();
int type,l,r;
while(m--){
type=read();
l=read(); r=read();
if(type) printf("%d\n",query(l,r));
else update(l,r);
}
return ;
}
三倍经验:
开关
光开关
去掉build即可
【洛谷P2574】XOR的艺术的更多相关文章
- 洛谷 P2574 XOR的艺术(线段树 区间异或 区间求和)
To 洛谷.2574 XOR的艺术 题目描述 AKN觉得第一题太水了,不屑于写第一题,所以他又玩起了新的游戏.在游戏中,他发现,这个游戏的伤害计算有一个规律,规律如下 1. 拥有一个伤害串为长度为n的 ...
- 洛谷P2574 XOR的艺术
题目描述 \(AKN\)觉得第一题太水了,不屑于写第一题,所以他又玩起了新的游戏.在游戏中,他发现,这个游戏的伤害计算有一个规律,规律如下 1. 拥有一个伤害串为长度为\(n\)的\(01\)串. 2 ...
- 洛谷——P2574 XOR的艺术
P2574 XOR的艺术 很久之前就想挑战一下这道题了,线段树下传标记的入门题,跟区间加法下传标记类似. #include<bits/stdc++.h> #define N 1000005 ...
- 洛谷 P2574 XOR的艺术
刚刚学了,线段树,一道线段树入门题试试水 下面是题面 题目描述 AKN觉得第一题太水了,不屑于写第一题,所以他又玩起了新的游戏.在游戏中,他发现,这个游戏的伤害计算有一个规律,规律如下 1. 拥有一个 ...
- 洛谷P2574 XOR的艺术(线段树)——Chemist
当线段树遇上无敌位运算! 还是老套路,线段树维护区间和,一个区间有几个"1"就是这个区间的区间和,同时支持区间修改区间查询,只不过操作从加法变成了异或.主要难点就在更新懒标记那里, ...
- 洛谷 2574 XOR的艺术
[题解] 线段树维护区间中1的个数就好了.每次修改就打上标记并把区间的sum改为len-sum. #include<cstdio> #include<algorithm> #i ...
- 【洛谷】【线段树+位运算】P2574 XOR的艺术
[题目描述:] AKN觉得第一题太水了,不屑于写第一题,所以他又玩起了新的游戏.在游戏中,他发现,这个游戏的伤害计算有一个规律,规律如下 1. 拥有一个伤害串为长度为n的01串. 2. 给定一个范围[ ...
- luogu P2574 XOR的艺术 (线段树)
luogu P2574 XOR的艺术 (线段树) 算是比较简单的线段树. 当区间修改时.\(1 xor 1 = 0,0 xor 1 = 1\)所以就是区间元素个数减去以前的\(1\)的个数就是现在\( ...
- P2574 XOR的艺术
题目描述 AKN觉得第一题太水了,不屑于写第一题,所以他又玩起了新的游戏.在游戏中,他发现,这个游戏的伤害计算有一个规律,规律如下 1. 拥有一个伤害串为长度为n的01串. 2. 给定一个范围[l,r ...
随机推荐
- c# 跨平台ide JetBrains Rider
https://www.jetbrains.com/rider/ et框架 调试hotfix用的,说是vs调试容易崩溃 破解方法 https://zhile.io/2018/08/18/jetbrai ...
- File upload error - unable to create a temporary file
php上传图片的时候会报错: File upload error - unable to create a temporary file 文件上传错误 - 无法创建一个临时文件 你只需要打开你的php ...
- Springboot - 集成 JPA
1.什么是 JPA? JPA就是Java Persistence API的意思,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中. 2. JPA 具有什么优 ...
- 使用mini-define实现前端代码的模块化管理
这篇文章主要介绍了使用mini-define实现前端代码的模块化管理,十分不错的一篇文章,这里推荐给有需要的小伙伴. mini-define 依据require实现的简易的前端模块化框架.如果你不想花 ...
- VMWare启动虚拟机失败,提示锁定文件失败解决方法
1.问题描述:未正常关闭虚拟机,重新启动时,VMWare启动虚拟机失败 2.解决方法: ①找到该虚拟系统所在的目录,即弹出框中的目录,在目录中找到Windows XP Professional.vmx ...
- C#博客记录二
1.认识运算符 我认为其中 最重要的就是逻辑运算符,对于每个人来说学习web前端就是要有一个好的思维.能够更好的运用. 2.算数运算符 变量名++意味先输出,值后增加. ++变量名意味值先增加,后输出 ...
- C# .net页面乱码
可在web.config中设置 <globalization requestEncoding="utf-8" responseEncoding="utf-8&quo ...
- linux下快速安装python3.xx
安装python3之前的准备工作: 当前环境是centos操作系统[已经安装了gcc++],在安装前需要安装zlib-devel包: yum install zlib-devel yum instal ...
- html5可拖动的进度条
总结:拖动显示进度的进度条 <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...
- Java中使用MongoUtils对mongodb数据库进行增、删、查、改
本文主要介绍在java应用中如何使用MongoUtils工具类对 mongodb进行增.删.查.改操作. 一.配置 1.将 common.jar库引入到项目环境中: (源代码:https://gite ...