题解见 : http://blog.csdn.net/iamzky/article/details/41088151 ORZ ZKY 2个懒标记:是否翻转,覆盖成了什么. 怎么处理一个块上有两个标记的情况呢? 若该块原来没有任何标记,或要打的标记和原本的标记种类相同,则直接打上标记: 若已有翻转标记,再覆盖时则先清除翻转标记,再打上覆盖标记: 若已有覆盖标记,再翻转时,则直接将覆盖标记取反. So 某个块上同时只会有1个标记. P.S.分块此题挺快的…… #include<cstdio> #i…
题目大意: 有5种运算维护集合S(S初始为空)并最终输出S. 5种运算如下: U T  S∪T I T S∩T D T  S-T C T T-S S T S⊕T 基本集合运算如下: A∪B {x : xÎA or xÎB} A∩B {x : xÎA and xÎB} A-B {x : xÎA and xÏB} A⊕B (A-B)∪(B-A) 思路: 每个数之间加入一个数,就像这样2 2.5 3 3.5 4 [2,3) -> [2,2.5] (3,4] -> [3.5,4] 用01表示集合,则U…
感觉很有趣的题呢. 每个点拆成两个,线段树维护. 不过这题难点其实在输入输出. #include<bits/stdc++.h> #define N (1<<17) #define M (l+r>>1) #define P (k<<1) #define S (k<<1|1) #define K l,r,k #define L l,M,P #define R M+1,r,S #define Z \ int l=0,int r=N,int k=1 in…
题目 略 题解 直接套黄学长模板. Orz 代码 #include <bits/stdc++.h> using namespace std; #define ll long long #define inf 1000000000 #define n (65536 * 2 + 1) char ch[5]; int read() { int x = 0, f = 0; char ch = getchar(); while (ch < '0' || ch > '9') { if (ch…
3226: [Sdoi2008]校门外的区间 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 615  Solved: 227[Submit][Status][Discuss] Description   受校门外的树这道经典问题的启发,A君根据基本的离散数学的知识,抽象出5种运算维护集合S(S初始为空)并最终输出S.现在,请你完成这道校门外的树之难度增强版——校门外的区间.   5种运算如下: U T S∪T I T S∩T D T S-T C…
Description   受校门外的树这道经典问题的启发,A君根据基本的离散数学的知识,抽象出5种运算维护集合S(S初始为空)并最终输出S.现在,请你完成这道校门外的树之难度增强版——校门外的区间.   5种运算如下: S∪T S∩T S-T T-S S⊕T   基本集合运算如下: {x : xÎA or xÎB} {x : xÎA and xÎB} {x : xÎA and xÏB} (A-B)∪(B-A)   Input 输入共M行. 每行的格式为X T,用一个空格隔开,X表示运算的种类,…
题目 首先是开闭区间的处理,我们把\(1.5\)这种数加进来,用\([1.5,6]\)来表示\((2,6]\) 根据离散数学的基本知识,尝试把五个操作转化成人话 把\([x,y]\)变成\(1\) 把\([0,x-1]\)和\([y+1,inf]\)变成\(0\) 把\([x,y]\)变成\(0\) 把\([x,y]\)取反,之后来一个二操作 把\([x,y]\)取反 于是线段树维护一下区间覆盖就好了 记得覆盖标记和取反标记只能同时存在一个就好了 代码 #include<algorithm>…
题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3226 题意:初始集合S为空.模拟四种集合操作:集合并.交.差.补集并. 思路:区间有开区间闭区间,首先区间左右都乘以2,这样闭区间在偶数位置,开区间在奇数位置.然后就是区间染色颜色反转两个操作.注意区间染色时,若有反转标记则清除:反转时若有染色标记则直接将染色反转即可. const int N=70005; struct node { int L,R; int re,color;…
链接 思路 bug漫天飞... 维护一颗线段树,支持区间赋值,和区间异或.因为会处理到一些方括号还是圆括号的问题,所以对于每一个下标都乘2,假设中间有一个.5即可,都变成了方括号,输出在处理一下. U  [l,r]赋值为1 I   [0,l-1],[r+1,n]赋值为0 D [l,r]区间涂0 C [0,l-1],[r+1,n]赋值为0,[l,r]区间异或 S [l,r]区间异或 bug列表:乘2后从0开始,因为0*2=0,0.5*2=1,zz的居然是从2开始的.. 读入的区间并不都是一位数..…
U T 即将区间 \(T\) 范围赋值为 \(1\) I T 即将区间 \(U - T\) 范围赋值为 \(0\) D T 即将区间 \(T\) 赋值为 \(0\) C T 由于 \(S=T-S=T(U-S)\),即将原状态取反后,将 \(U-T\) 范围赋值为 \(0\) S T 即将区间 \(T\) 翻转 至于开闭区间,我们不妨把下标缩放到原来的两倍,然后在输入输出的时候讨论一下即可 这题的输入真的挺正常(鬼畜) #include <bits/stdc++.h> using namespa…