这两天学了很长时间于是做了一道水题

我就用了模板,就连任何优化都没有

就AC了,复杂度也很爆炸10个点1500多毫秒

这个题就是把lazy[]改成记录下修改的次数,每次修改的时候mod 2,因为反过来再返回去就一样了

修改变成

	sum[root] = r - l + 1 - sum[root];

其他的几乎就没区别了

#include<bits/stdc++.h>

using namespace std;

inline int read(){int s=0,w=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();return s*w;}
inline void write(int x) {if(x<0) putchar('-'),x=-x; if(x>9) write(x/10); putchar(x%10+'0'); } int sum[400010],lazy[400010]; void add(int root,int l,int r,int k){
if(k == 0)//如果不修改的话直接退出就好了
return ;
lazy[root] += k;//记录次数
sum[root] = r - l + 1 - sum[root];//修改
lazy[root] %= 2;//2以外的毫无意义
return ;
} void putdown(int root,int l,int r){
if(lazy[root] == 0)//没有标记不下发
return ;
int mod = lazy[root] % 2; int mid = (l + r) >> 1;
add(root * 2,l,mid,mod);//左右孩子下发
add(root * 2 + 1,mid + 1,r,mod);
lazy[root] = 0;//标记清空
return ;
} void change(int root,int l,int r,int x,int y){
if(l > y || r < x)//不在范围内退出(好像没必要)
return ;
if(l >= x && r <= y){//完全在范围内就标记然后下发
add(root,l,r,1);
return ;
}
int mid = (l + r) >> 1;
putdown(root,l,r);//标记不到正确位置就继续发
int left = root << 1;
int right = left + 1;
if(x <= mid) change(left,l,mid,x,y);
if(mid < y) change(right,mid + 1,r,x,y);
sum[root] = sum[left] + sum[right];//更新父节点
} int find(int root,int l,int r,int x,int y){
if(l >= x && r <= y){//完全包含加上返回
return sum[root];
}
int mid = (l + r) >> 1,ans = 0;
int left = root << 1;
int right = left + 1;
putdown(root,l,r);//传到需要的地方
if(x <= mid) ans += find(left,l,mid,x,y);
if(mid < y) ans += find(right,mid + 1,r,x,y);
return ans;
} int main(){
int n,m;
cin >> n >> m;
for(int i = 1; i <= m;++i){
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
if(x == 0){
change(1,1,n,y,z);
}
else{
write(find(1,1,n,y,z));
cout<<endl;
}
}
return 0;
}

洛谷 p3870 开关 线段树模板的更多相关文章

  1. 洛谷 - P1198 - 最大数 - 线段树

    https://www.luogu.org/problemnew/show/P1198 要问区间最大值,肯定是要用线段树的,不能用树状数组.(因为没有逆元?但是题目求的是最后一段,可以改成类似前缀和啊 ...

  2. 洛谷 P2391 白雪皑皑 线段树+优化

    题目描述: 现在有 \(N\) 片雪花排成一列. Pty 要对雪花进行$ M $次染色操作,第 \(i\)次染色操作中,把\((i*p+q)%N+1\) 片雪花和第\((i*q+p)%N+1\)片雪花 ...

  3. 洛谷3834 hdu2665主席树模板,动态查询区间第k小

    题目链接:https://www.luogu.com.cn/problem/P3834 对于区间查询第k小的问题,在区间数量达到5e5的时候是难以用朴素数据结构实现的,这时候主席树就应运而生了,主席树 ...

  4. 洛谷P3870开关题解

    我们先看题面,一看是一个区间操作,再看一下数据范围,就可以很轻松地想到是用一个数据结构来加快区间查询和修改的速度,所以我们很自然的就想到了线段树. 但是这个题还跟普通的线段树不一样,这个题可以说要思考 ...

  5. 【洛谷】【线段树】P1471 方差

    [题目背景:] 滚粗了的HansBug在收拾旧数学书,然而他发现了什么奇妙的东西. [题目描述:] 蒟蒻HansBug在一本数学书里面发现了一个神奇的数列,包含N个实数.他想算算这个数列的平均数和方差 ...

  6. 【洛谷】【线段树】P1047 校门外的树

    [题目描述:] 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0,1,2,……,L ...

  7. 【洛谷】【线段树】P1886 滑动窗口

    [题目描述:] 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值. [输入格式:] 输入一共 ...

  8. 【洛谷】【线段树】P3353 在你窗外闪耀的星星

    [题目描述:] /* 飞逝的的时光不会模糊我对你的记忆.难以相信从我第一次见到你以来已经过去了3年.我仍然还生动地记得,3年前,在美丽的集美中学,从我看到你微笑着走出教室,你将头向后仰,柔和的晚霞照耀 ...

  9. 洛谷P5280 [ZJOI2019]线段树

      https://www.luogu.org/problemnew/show/P5280 省选的时候后一半时间开这题,想了接近两个小时的各种假做法,之后想的做法已经接近正解了,但是有一些细节问题理不 ...

随机推荐

  1. ReentrantLock和Condition实现生产者和消费者

    一个生产者和一个消费者 public class ConditionTest { private static ReentrantLock lock = new ReentrantLock(); pr ...

  2. 2019-11-29-VisualStudio-好用插件集合

    原文:2019-11-29-VisualStudio-好用插件集合 title author date CreateTime categories VisualStudio 好用插件集合 lindex ...

  3. checkbox实现单选

    脚本: function bb(obj,name) { var aa = document.getElementsByName(name); for (var i = 0; i < aa.len ...

  4. DjangoDRF之视图总结

    思维导图xmind文件:https://files-cdn.cnblogs.com/files/benjieming/DRF%E6%A8%A1%E5%9D%97%E4%B9%8B%E8%A7%86%E ...

  5. 【开发工具】- Idea常用快捷键

    快捷键 Ctrl + shift + F 全局搜索 Ctrl + F 搜索 Ctrl + Z 后退 Ctrl + shift + Z 前进 Ctrl + Shift+E 最近更改的文件 Ctrl + ...

  6. C#常用集合类的实现以及基本操作复杂度

    List 集合类是顺序线性表,Add操作是O(1)或是O(n)的,由于List的容量是动态扩容的,在未扩容之前,其Add操作是O(1),而在需要扩容的时候,会拷贝已存在的那些元素同时添加新的元素,此时 ...

  7. 如何在相同的类名中单独为选中元素设置JS

    很多时候,我发现对一个类名添加事件,每次都是所有同类名元素一起触发,使用 this可以仅对当前选中的元素应用事件 如 $('.guowai button').click(function() { /* ...

  8. riscv 汇编与反汇编

    为了riscv指令集,我们需要汇编与反汇编工具来分析指令格式. 可以用下面的两个工具来汇编和反汇编,下载链接:https://pan.baidu.com/s/1eUbBlVc riscv-none-e ...

  9. 5G:为人工智能与智能制造赋能

    近几年,全球有两大科技领域越来越热:一个是人工智能,另一个是5G.两者都是能够改变时代.改变社会.改变经济的颠覆性技术.目前,我国已经发放了四张5G牌照,5G产业处在爆发前夜的阶段:人工智能方面,业界 ...

  10. Direct Access to Video Encoding and Decoding

    来源:http://asciiwwdc.com/2014/sessions/513   Direct Access to Video Encoding and Decoding  Session 5 ...