lazy写崩了…….

查了好久

/*
U—> [l,r]–>1
I—> [1,l-1] [r+1,+无穷] –>0
D—> [l,r]–>0
C—> [1,l-1] [r+1,+无穷]–>0 xor[l,r]
S—> [l,r]–>xor
*/

//By SiriusRen
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define maxn 140000
struct Tree{int lazy;bool cover;Tree(){lazy=-1;}}tree[maxn*16];//=0 不选  =1 选   =2 xor
int xx,yy,vis[maxn*2];
char op,Left,Right,f;
void push_down(int pos){int lson=pos<<1,rson=pos<<1|1;if(tree[pos].lazy==2){if(tree[lson].lazy==-1)tree[lson].lazy=2,tree[lson].cover=!tree[lson].cover;else if(tree[lson].lazy==2)tree[lson].lazy=-1,tree[lson].cover=!tree[lson].cover;else tree[lson].lazy=!tree[lson].lazy,tree[lson].cover=!tree[lson].cover;if(tree[rson].lazy==-1)tree[rson].lazy=2,tree[rson].cover=!tree[rson].cover;else if(tree[rson].lazy==2)tree[rson].lazy=-1,tree[rson].cover=!tree[rson].cover;else tree[rson].lazy=!tree[rson].lazy,tree[rson].cover=!tree[rson].cover;}else tree[lson].cover=tree[rson].cover=tree[pos].lazy,tree[lson].lazy=tree[rson].lazy=tree[pos].lazy;tree[pos].lazy=-1;
}
void update(int l,int r,int pos,int L,int R,int id){if(l>=L&&r<=R){if(id!=2)tree[pos].cover=id,tree[pos].lazy=id;else{if(tree[pos].lazy==-1)tree[pos].lazy=2;else if(tree[pos].lazy==2)tree[pos].lazy=-1;else tree[pos].lazy=!tree[pos].lazy;tree[pos].cover=!tree[pos].cover;}return;}if(~tree[pos].lazy)push_down(pos);int mid=(l+r)>>1,lson=pos<<1,rson=pos<<1|1;if(mid>=R)update(l,mid,lson,L,R,id);else if(mid<L)update(mid+1,r,rson,L,R,id);else update(l,mid,lson,L,R,id),update(mid+1,r,rson,L,R,id);
}
void query(int l,int r,int pos,int x){if(~tree[pos].lazy)push_down(pos);if(l==r){vis[l]=tree[pos].cover;return;}int mid=(l+r)>>1,lson=pos<<1,rson=pos<<1|1;if(mid>=x)query(l,mid,lson,x);else query(mid+1,r,rson,x);
}
int main(){while(scanf("%c %c%d,%d%c",&op,&Left,&xx,&yy,&Right)!=EOF){xx<<=1,yy<<=1;if(Left=='(')xx++;if(Right==')')yy--;if(xx>yy)xx=yy=maxn-1;if(op=='U')update(0,maxn,1,xx,yy,1);else if(op=='I'){if(xx)update(0,maxn,1,0,xx-1,0);update(0,maxn,1,yy+1,maxn,0);}else if(op=='D')update(0,maxn,1,xx,yy,0);else if(op=='C'){if(xx)update(0,maxn,1,0,xx-1,0);update(0,maxn,1,yy+1,maxn,0);update(0,maxn,1,xx,yy,2);}else if(op=='S')update(0,maxn,1,xx,yy,2);getchar();}for(int i=0;i<maxn;i++)query(0,maxn,1,i);xx=-1;for(int i=0;i<135000;i++){if(vis[i]&&~xx)yy=i;else if(!vis[i]){if(~xx){if(f)printf(" ");if(!f)f=1;if(xx&1)putchar('(');else putchar('[');printf("%d,%d",xx>>1,(yy+1)>>1);if(yy&1)putchar(')');else putchar(']');}xx=-1;}else if(vis[i]&&xx==-1)xx=yy=i;}if(!f)printf("empty set");
}

转载于:https://www.cnblogs.com/SiriusRen/p/6532283.html

POJ 3225 线段树+lazy标记相关推荐

  1. POJ 3468 线段树+lazy标记

    lazy标记   Time Limit:5000MS     Memory Limit:131072KB     64bit IO Format:%I64d & %I64u  Submit S ...

  2. HYSBZ - 1798 Seq 维护序列seq 线段树lazy标记

    传送门 这道题属实是线段树的道比刷题,又加又乘的,当然还可能会有乘除,阶乘等等可能的情况. 对于这道题,主要的一个就是怎么记录lazy标记,首先的话一个数组是肯定不行的,设乘的为lazy,加的为add ...

  3. 20.CF817F MEX Queries 线段树(Lazy标记练习)

    20.CF817F MEX Queries 离散化+区间覆盖+区间反转线段树 个人Limitの线段树题单题解主目录:Limitの线段树题单 题解目录_HeartFireY的博客-CSDN博客 要求维护 ...

  4. [hiho 22]线段树-lazy标记的下放

    题目描述 之前提到过,线段树之所以更新查询快,是因为区间更新有lazy标记使得不需要每次都操作到叶子节点. 但是如果要操作一个节点时,其父节点上的lazy标记应当被释放,否则该节点无法得到最新的正确结 ...

  5. Hotel POJ - 3667(线段树 + 区间合并

    题意: 给定长度为n的区间 ,有2个操作: 操作1: 在区间中靠左放k个元素,输出新放入元素中最左边的位置,如果放不下输出 0: 操作2 : 清空 l 到 l+w-1这一段区间的元素 这里有一个状态转 ...

  6. POJ 2777 线段树

    一道线段树.lazy标记+位运算--(第一次写这个什么lazy标记,抄了一发题解) 我们发现:"或"操作在这里用正合适. 原题请戳这里 // by Sirius_Ren #incl ...

  7. POJ - 2528 线段树+离散化

    其实很早就在白书上的常用技巧上 看到离散化的操作,但是之前一直没遇到过需要离散化的题目(应该是我太菜的缘故),所以一直也没怎么重视,下面说说这道题目的考点,也就是离散化. 什么是离散化呢?请先自行百度 ...

  8. CodeForces - 817F MEX Queries(线段树lazy序)

    题目链接:点击查看 题目大意:初始时有一个空的集合,需要执行 n 次操作: 1 l r:将区间 [ l , r ] 内未出现的数加入到集合中 2 l r:将区间 [ l , r ] 内出现的数字全部删 ...

  9. POJ 3264 线段树

    题意 传送门 POJ 3264 题解 线段树维护区间的最大值和最小值即可. #include <cstdio> #include <cstring> #include < ...

最新文章

  1. python 判断字符串是否以数字结尾
  2. python升级和安装pip
  3. [转]struts2处理.do后缀的请求
  4. 正则表达式调用“或”变量
  5. 必须对手机内置业务制定规范防止后门
  6. VII Python(9)socket编程
  7. Charles的断点调试(APP)
  8. Counting Triangles
  9. 《Python Cookbook 3rd》笔记(2.19):实现一个简单的递归下降分析器
  10. ‘dict’ object has no attribute 'has_key'
  11. c++ opencv添加logo_Python+Opencv+Tkinter指纹识别与人脸识别的门禁兼考勤(二)
  12. Loadrunner如何监控Linux系统资源
  13. 7)Thymeleaf 内联表达式、文本、JavaScript、CSS
  14. 精心收集了60个C语言项目源码,分享给大家
  15. Windows系统如何远程桌面连接
  16. 渗透测试_缓冲区溢出
  17. UGUI 图集打包工具Sprite Packer
  18. 利用公式实现RGB图转化为灰度图
  19. 【Java】绘图入门和机制,绘图方法演示(绘制坦克)
  20. 2022年“研究生科研素养提升”系列公益讲座在线测评题目

热门文章

  1. FCN Caffe:可视化featureMaps和Weights(C++)、获取FCN结果
  2. mysql的分库分表
  3. 如何为编程爱好者设计一款好玩的智能硬件(三)——该选什么样的MCU呢?
  4. (String)、toString、String.valueOf的区别
  5. EMC存储产品分析介绍 (一)
  6. Vue源码分析系列四:Virtual DOM
  7. 为什么我们如此迷恋眼科手术?
  8. 余敖的实验整理(还没完成)
  9. 修改octave的editor的背景颜色
  10. Earliest PEP Algorithm Principles