CF915E 动态开线段树

题面

因为\(n\le10^9\),所以动态开点,线段树维护\([1,n]\)天非工作日数量。

之前的结构体写法被卡了,只能改成函数传l,r(虽然也不难)

动态开点好写,但是太菜了线段树部分写炸了,对lazy标记理解不深,下放标记时注意不要把本来子区间的信息覆盖了,下放完标记后要把标记复原

#include <cstdio>
#define MAXN 15001000
#define mid ((xl+xr)>>1)
using namespace std;
int n,q;
int tot;
struct nod{
int sl,sr,val;
int lazy;
} tre[MAXN];
void build_nod(int &x, int l, int r, bool unwork){
x=++tot;
if(unwork) tre[x].val=r-l+1,tre[x].lazy=1;
else tre[x].val=0,tre[x].lazy=-1;
}
void push_down(int x, int xl, int xr){
if(tre[x].lazy==0) return;
if(tre[x].lazy==1){
if(tre[x].sl==0) build_nod(tre[x].sl, xl, mid, 1);
else tre[tre[x].sl].val=(mid)-(xl)+1,tre[tre[x].sl].lazy=1;
if(tre[x].sr==0) build_nod(tre[x].sr, mid+1, xr, 1);
else tre[tre[x].sr].val=(xr)-(mid+1)+1,tre[tre[x].sr].lazy=1;
}else{
if(tre[x].sl==0) build_nod(tre[x].sl, xl, mid, 0);
else tre[tre[x].sl].val=0,tre[tre[x].sl].lazy=-1;
if(tre[x].sr==0) build_nod(tre[x].sr, mid+1, xr, 0);
else tre[tre[x].sr].val=0,tre[tre[x].sr].lazy=-1;
}
tre[x].lazy=0;
}
void change(int &x, int xl, int xr, int l, int r, bool unwork){
if(x==0){
build_nod(x, l, r, unwork);
return;
}
if(l<=xl&&xr<=r){
if(unwork) tre[x].val=xr-xl+1,tre[x].lazy=1;
else tre[x].val=0,tre[x].lazy=-1;
return;
}
push_down(x, xl, xr);
if(l<=mid) change(tre[x].sl, xl, mid,l, r, unwork);
if(mid<r) change(tre[x].sr, mid+1, xr, l, r, unwork);
tre[x].val=tre[tre[x].sl].val+tre[tre[x].sr].val;
}
int main()
{
scanf("%d %d", &n, &q);
int root=0;
change(root, 1, n, 1, n, 0);
while(q--){
int l,r,k;
scanf("%d %d %d", &l, &r, &k);
if(k==1) change(root, 1, n, l, r, 1);
else change(root, 1, n, l, r, 0);
printf("%d\n", n-tre[root].val);
}
return 0;
}

最新文章

  1. mono中发送邮件并保存本次收件人的地址
  2. axure快速原型设计工具
  3. Linux:文件权限
  4. HTML 插入视频
  5. OCP读书笔记(8) - 监控和调优RMAN
  6. 编程算法 - 分割数 代码(C)
  7. C#通过模板导出Word(文字,表格,图片)
  8. 杭电ACM——自我强化步骤
  9. delphi各种错
  10. 【BZOJ2342】双倍回文(回文树)
  11. Python 中的继承、多态和封装
  12. safari10.0以上版本出现默认小人头图标
  13. Java之所有输入流输出流的分类
  14. 【Python3练习题 005】输入三个整数x,y,z,请把这三个数由小到大输出
  15. html-webpack-plugin插件使用chunks属性时报错
  16. MVC+三层+ASP.NET简单登录验证
  17. effective C++学习三(仅供个人学习记录,本文摘录effective C++)
  18. 10个CSS简写/优化技巧-摘自网友
  19. Pr学习日记
  20. error while loading shared libraries: libudev.so.0 的问题

热门文章

  1. (二)Spring框架之JDBC的基本使用(p6spy插件的使用)
  2. (三)引用中央仓库中不存在的jar包
  3. Java HeapSort
  4. [转载]JDK、SDK、J2EE、J2SE、J2ME的区别
  5. numpy相关使用
  6. KVM之磁盘管理工具qemu-img小结
  7. vue作用域插槽
  8. 【Hibernate】检索方式
  9. 使用.bat 批量将部分文件迁移到新的路径下
  10. 服务器IP与个人IP的特点