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的艺术的更多相关文章

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

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

  2. 洛谷P2574 XOR的艺术

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

  3. 洛谷——P2574 XOR的艺术

    P2574 XOR的艺术 很久之前就想挑战一下这道题了,线段树下传标记的入门题,跟区间加法下传标记类似. #include<bits/stdc++.h> #define N 1000005 ...

  4. 洛谷 P2574 XOR的艺术

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

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

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

  6. 洛谷 2574 XOR的艺术

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

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

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

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

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

  9. P2574 XOR的艺术

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

随机推荐

  1. TT8509: PL/SQL execution terminated; PLSQL_TIMEOUT exceeded

    TT8509: PL/SQL execution terminated; PLSQL_TIMEOUT exceeded plsql_timeout连接超时,解决办法: ODBC pl/sql选项卡 修 ...

  2. 修改Android解锁界面

    解锁界面效果类似如下 其实这也是我后面做出的效果,样机因为没有ROOT不好调试截图,功能是将解锁的图标添加了最近运行的运用的图标,这样的话更方便用户去使用 1.分析 1.1.Android锁屏功能分析 ...

  3. 深入理解JavaScript系列(15):函数(Functions)

    介绍 本章节我们要着重介绍的是一个非常常见的ECMAScript对象——函数(function),我们将详细讲解一下各种类型的函数是如何影响上下文的变量对象以及每个函数的作用域链都包含什么,以及回答诸 ...

  4. [转]MVC+JQuery validate实现用户输入验证

    本文转自:http://www.cnblogs.com/ahui/archive/2010/10/08/1845677.html MVC服务器端: 1.在controller中验证用户输入,如果验证失 ...

  5. 02.List泛型集合

    List泛型可以转换成数组 List泛型和数组的相同点: List泛型的数据类型必须是指定的,数组的数据类型也必须是指定的. List泛型和数组的不同点: List泛型的长度是随意的,而数组的长度必须 ...

  6. python学习(五)--打印错误信息

    from urllib import request #打印错误信息 except Exceptionlist = [ "http://www.baidu11.com/", &qu ...

  7. python高阶函数sorted

    原文 排序也是在程序中经常用到的算法.无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小.如果是数字,我们可以直接比较,但如果是字符串或者两个dict呢?直接比较数学上的大小是没有意义的,因 ...

  8. PAT 1025 PAT Ranking

    #include <cstdio> #include <cstdlib> #include <vector> #include <cstring> #i ...

  9. vbScript: 编号成生不夠位數前面加零

    '编号成生Geovin Du '不夠位數前面加零 塗聚文 Function getStringlen(str,lenint) so="" itop=0 slen=Len(str) ...

  10. 二维数组针对某字段排序 - array_multisort()

    /** * 针对二维数组下的某字段排序 * @param array $myarr 被排序数组 * @param string $sort_key 排序根据字段 * @param flag $sort ...