POJ 3225 Help with Intervals 线段树 成段更新
2012-11-24 15:06
447 查看
View Code
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; const int maxn = 65666<<1; #define lson l, m, rt<<1 #define rson m+1, r, rt<<1|1 #define mid int m = (l + r) >> 1 int col[maxn<<2], XOR[maxn<<2]; bool vis[maxn<<2]; void FXOR(int rt) { if(col[rt] != -1) col[rt] ^=1; else XOR[rt] ^= 1; } void pushdown(int rt) { if(col[rt] != -1) { col[rt<<1] = col[rt<<1|1] = col[rt]; XOR[rt<<1] = XOR[rt<<1|1] = 0; col[rt] = -1; } if(XOR[rt]) { FXOR(rt<<1); FXOR(rt<<1|1); XOR[rt] = 0; } } void update(char c, int L, int R, int l, int r, int rt) { if(L <= l && r <= R) { if(c == 'U') col[rt] = 1, XOR[rt] = 0; else if(c == 'D') col[rt] = 0, XOR[rt] = 0; else if(c == 'C' || c == 'S') FXOR(rt); return; } pushdown(rt); mid; if(L <= m) update(c, L, R, lson); else if(c == 'I' || c == 'C') XOR[rt<<1] = col[rt<<1] = 0; if(R > m ) update(c, L, R, rson); else if(c == 'I' || c == 'C') XOR[rt<<1|1] = col[rt<<1|1] = 0; } void query(int l, int r, int rt) { if(col[rt] == 1) { for(int i = l; i <= r; i++) vis[i] = 1; return; } if(l == r) return; pushdown(rt); mid; query(lson); query(rson); } int main() { //freopen("int.txt", "r", stdin); //freopen("out.txt", "w", stdout); int i, j; char l, r, c; int x, y; col[1] = XOR[1] = 0; while(~scanf("%c %c%d,%d%c\n", &c, &l, &x, &y, &r)) { x <<= 1; y <<= 1; if(l == '(')x++; if(r == ')')y--; update(c, x, y, 0, maxn-1, 1); } memset(vis, 0, sizeof(vis)); query(0, maxn-1, 1); bool flag = 0; for(i = 0; i < maxn; i++) { if(vis[i]) { j = i; while(vis[j+1]) j++; printf("%c%d,%d%c ", i&1 ? '(': '[', i>>1, (j+1)>>1, j&1 ? ')': ']'); flag = 1; i = j; } } if(!flag) puts("empty set"); return 0; }
相关文章推荐
- POJ-3225 Help with Intervals-线段树/成段更新+倍增区间法
- POJ 3225 Help with Intervals (线段树 成段更新, 懒惰标记*2)
- POJ 3225 Help with Intervals 线段树 成段更新
- POJ 3225 Help with Intervals(线段树成段更新)
- POJ 3225 Help with Intervals 线段树 成段更新
- POJ 3225 - Help with Intervals(线段树)
- POJ 3225 Help with Intervals(线段树)
- POJ 3225 Help with Intervals(线段树)
- (Relax 线段树1.4)POJ 3225 Help with Intervals
- poj 3225 Help with Intervals -线段树-延迟标记-区间交并补
- poj 3225 Help with Intervals 线段树lazy-tag求解区间运算
- HDU-3225 Help with Intervals 线段树成段更新
- poj 3225 Help with Intervals(线段树进阶,处理区间,拆点)
- POJ 3225 (线段树 区间更新) Help with Intervals
- poj 3225 Help with Intervals(线段树区间更新)
- poj 3225 Help with Intervals[线段树]
- poj 3225 Help with Intervals(线段树)
- POJ 3225 Help with Intervals(线段树)
- POJ 3225 Help with Intervals(线段树)
- poj 3225 Help with Intervals(线段树+区间的交集,差集,补集,并集)好难的题目,一天了,真是纠结