思路

01串的区间求和,区间翻转 lazy%20 则不用翻转,lazt%21则要翻转

模板题

代码

#include <iostream>
#include <vector>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <cmath>
#define ls rt<<1
#define rs rt<<1|1
#define ll long long
#define FOR(i,a,b) for(int i=a;i<=b;++i)
using namespace std;
const int maxn = 2e5 + 7;
int read() {
int x = 0, f = 1; char s = getchar();
for (; s < '0' || s > '9'; s = getchar()) if (s == '-') f = -1;
for (; s >= '0' && s <= '9'; s = getchar()) x = x * 10 + s - '0';
return x * f;
}
int n, m,a[maxn];
struct node{
int l,r,size,sum,lazy;
}e[maxn<<2];
void pushup(int rt) {
e[rt].sum=e[ls].sum+e[rs].sum;
}
void pushdown(int rt) {
if(e[rt].lazy%2) {
e[ls].lazy++;
e[rs].lazy++;
e[ls].sum=e[ls].size-e[ls].sum;
e[rs].sum=e[rs].size-e[rs].sum;
e[rt].lazy=0;
}
}
void build(int l,int r,int rt) {
e[rt].l=l,e[rt].r=r,e[rt].size=r-l+1;
if(l==r) {
e[rt].sum=a[l];
return;
}
int mid=(l+r)>>1;
build(l,mid,ls);
build(mid+1,r,rs);
pushup(rt);
}
void modfity(int L,int R,int rt) {
if(L<=e[rt].l&&e[rt].r<=R) {
e[rt].sum=e[rt].size-e[rt].sum;
e[rt].lazy++;
return;
}
pushdown(rt);
int mid=(e[rt].l+e[rt].r)>>1;
if(L<=mid) modfity(L,R,ls);
if(R>mid) modfity(L,R,rs);
pushup(rt);
}
int query(int L,int R,int rt) {
if(L<=e[rt].l&&e[rt].r<=R) {
return e[rt].sum;
}
pushdown(rt);
int mid=(e[rt].l+e[rt].r)>>1,ans=0;
if(L<=mid) ans+=query(L,R,ls);
if(R>mid) ans+=query(L,R,rs);
return ans;
}
int main() {
n=read(),m=read();
FOR(i,1,n) scanf("%1d",&a[i]);
build(1,n,1);
FOR(i,1,m) {
int p=read(),x=read(),y=read();
if(p) {
printf("%d\n",query(x,y,1));
} else {
modfity(x,y,1);
}
}
return 0;
}

最新文章

  1. 单片机DA转换实现正弦波
  2. 合理利用gradle的占位符功能
  3. EC笔记,第一部分:1.视C++为一个语言联邦
  4. mysql 性能优化方案 (转)
  5. java中关于try、catch、finally中的细节分析
  6. 比较两个Long对象值
  7. 洛谷 P1858 多人背包
  8. 【转载】ASP.NET获取路径的方法
  9. andriod系统裁剪心得
  10. 启动任务StartTask() 发送完消息队列 自己删除,接收方一直显示数据 用OSQFlush(Str_Q); //清空消息队列 下面纠结接收不到了 哈哈
  11. MVC校验特性
  12. Codeforces Round #441 (Div. 2, by Moscow Team Olympiad) D. Sorting the Coins
  13. Redis 学习笔记-应用场景
  14. 编程语言 : Java的动态Web解决方案泛谈
  15. java正则表达式学习笔记
  16. 关于JDCB连接oracle数据库。
  17. mysql启动错误,提示crash 错误
  18. 解题(StringJiaMi--字符串加密)
  19. 使用阿里云Python SDK管理ECS安全组
  20. Java之序列化和反序列化

热门文章

  1. webpack笔记二——entry
  2. PS快速制作下雪效果
  3. Java实现批量插入
  4. 实现一个2008serve的IIS的虚拟目录(通过网络路径(UNC)的形式,共享在另外一个2008服务器上
  5. python中执行shell命令行read结果
  6. discuz formhash
  7. sql server 中的分区函数用法(partition by 字段)
  8. Apache+php+mysql环境配置
  9. 209. Minimum Size Subarray Sum(双指针)
  10. VS2010/MFC编程入门之四十四(MFC常用类:定时器Timer)