POJ 3225 线段树+lazy标记
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标记相关推荐
- POJ 3468 线段树+lazy标记
lazy标记 Time Limit:5000MS Memory Limit:131072KB 64bit IO Format:%I64d & %I64u Submit S ...
- HYSBZ - 1798 Seq 维护序列seq 线段树lazy标记
传送门 这道题属实是线段树的道比刷题,又加又乘的,当然还可能会有乘除,阶乘等等可能的情况. 对于这道题,主要的一个就是怎么记录lazy标记,首先的话一个数组是肯定不行的,设乘的为lazy,加的为add ...
- 20.CF817F MEX Queries 线段树(Lazy标记练习)
20.CF817F MEX Queries 离散化+区间覆盖+区间反转线段树 个人Limitの线段树题单题解主目录:Limitの线段树题单 题解目录_HeartFireY的博客-CSDN博客 要求维护 ...
- [hiho 22]线段树-lazy标记的下放
题目描述 之前提到过,线段树之所以更新查询快,是因为区间更新有lazy标记使得不需要每次都操作到叶子节点. 但是如果要操作一个节点时,其父节点上的lazy标记应当被释放,否则该节点无法得到最新的正确结 ...
- Hotel POJ - 3667(线段树 + 区间合并
题意: 给定长度为n的区间 ,有2个操作: 操作1: 在区间中靠左放k个元素,输出新放入元素中最左边的位置,如果放不下输出 0: 操作2 : 清空 l 到 l+w-1这一段区间的元素 这里有一个状态转 ...
- POJ 2777 线段树
一道线段树.lazy标记+位运算--(第一次写这个什么lazy标记,抄了一发题解) 我们发现:"或"操作在这里用正合适. 原题请戳这里 // by Sirius_Ren #incl ...
- POJ - 2528 线段树+离散化
其实很早就在白书上的常用技巧上 看到离散化的操作,但是之前一直没遇到过需要离散化的题目(应该是我太菜的缘故),所以一直也没怎么重视,下面说说这道题目的考点,也就是离散化. 什么是离散化呢?请先自行百度 ...
- CodeForces - 817F MEX Queries(线段树lazy序)
题目链接:点击查看 题目大意:初始时有一个空的集合,需要执行 n 次操作: 1 l r:将区间 [ l , r ] 内未出现的数加入到集合中 2 l r:将区间 [ l , r ] 内出现的数字全部删 ...
- POJ 3264 线段树
题意 传送门 POJ 3264 题解 线段树维护区间的最大值和最小值即可. #include <cstdio> #include <cstring> #include < ...
最新文章
- python 判断字符串是否以数字结尾
- python升级和安装pip
- [转]struts2处理.do后缀的请求
- 正则表达式调用“或”变量
- 必须对手机内置业务制定规范防止后门
- VII Python(9)socket编程
- Charles的断点调试(APP)
- Counting Triangles
- 《Python Cookbook 3rd》笔记(2.19):实现一个简单的递归下降分析器
- ‘dict’ object has no attribute 'has_key'
- c++ opencv添加logo_Python+Opencv+Tkinter指纹识别与人脸识别的门禁兼考勤(二)
- Loadrunner如何监控Linux系统资源
- 7)Thymeleaf 内联表达式、文本、JavaScript、CSS
- 精心收集了60个C语言项目源码,分享给大家
- Windows系统如何远程桌面连接
- 渗透测试_缓冲区溢出
- UGUI 图集打包工具Sprite Packer
- 利用公式实现RGB图转化为灰度图
- 【Java】绘图入门和机制,绘图方法演示(绘制坦克)
- 2022年“研究生科研素养提升”系列公益讲座在线测评题目
热门文章
- FCN Caffe:可视化featureMaps和Weights(C++)、获取FCN结果
- mysql的分库分表
- 如何为编程爱好者设计一款好玩的智能硬件(三)——该选什么样的MCU呢?
- (String)、toString、String.valueOf的区别
- EMC存储产品分析介绍 (一)
- Vue源码分析系列四:Virtual DOM
- 为什么我们如此迷恋眼科手术?
- 余敖的实验整理(还没完成)
- 修改octave的editor的背景颜色
- Earliest PEP Algorithm Principles