POJ 2777 Count Color
2012-07-15 17:19
281 查看
线段树。各种WA。最后过了,老泪纵横。
View Code
View Code
#include <stdio.h> #define MAXN 100001 int col[MAXN * 4],lazy[MAXN * 4]; void update(int cur) { col[cur] = col[cur << 1] | col[cur << 1 | 1]; } void pushdown(int cur,int x,int y) { int mid = (x + y) >> 1,ls = cur << 1,rs = cur << 1 | 1; if(lazy[cur] != -1) { lazy[ls] = lazy[cur]; lazy[rs] = lazy[cur]; col[ls] = lazy[cur]; col[rs] = lazy[cur]; lazy[cur] = -1; } } void build(int cur,int x,int y) { int mid = (x + y) >> 1,ls = cur << 1,rs = cur << 1 | 1; lazy[cur] = -1; if(x == y) { col[cur] = 1; return; } build(ls,x,mid); build(rs,mid + 1,y); update(cur); } void change(int cur,int x,int y,int s,int t,int c) { int mid = (x + y) >> 1,ls = cur << 1,rs = cur << 1 | 1; if(x >= s && y <= t) { col[cur] = c; lazy[cur] = c; return; } pushdown(cur,x,y); if(mid >= s) change(ls,x,mid,s,t,c); if(mid + 1 <= t) change(rs,mid + 1,y,s,t,c); update(cur); } void query(int cur,int x,int y,int s,int t,int &ans) { int mid = (x + y) >> 1,ls = cur << 1,rs = cur << 1 | 1; if(x >= s && y <= t) { ans |= col[cur]; return; } pushdown(cur,x,y); if(mid >= s) query(ls,x,mid,s,t,ans); if(mid + 1 <= t) query(rs,mid + 1,y,s,t,ans); //update(cur); } int cal(int a) { int ans = 0; while(a) { if(a % 2) ans++; a >>= 1; } return ans; } int main() { int L,O,T,a,b,c,ans,temp; char ch; while(scanf("%d%d%d",&L,&T,&O) == 3) { build(1,1,L); while(O--) { /*printf("\n"); for(int i = 0;i <= L * 4;i++) printf("%d ",col[i]); printf("\n");*/ getchar(); scanf("%c",&ch); if(ch == 'C') { scanf("%d%d%d",&a,&b,&c); if(a > b) { temp = a; a = b; b = temp; } change(1,1,L,a,b,1 << (c - 1)); } else { scanf("%d%d",&a,&b); if(a > b) { temp = a; a = b; b = temp; } ans = 0; query(1,1,L,a,b,ans); printf("%d\n",cal(ans)); } /*printf("\n"); for(int i = 0;i <= L * 4;i++) printf("%d ",col[i]); printf("\n"); for(int i = 0;i <= L * 4;i++) printf("%d ",lazy[i]); printf("\n");*/ } } return 0; }
相关文章推荐
- poj 2777 Count Color(线段树)
- poj 2777 Count Color
- poj 2777 Count Color
- POJ 2777 Count Color (线段树区间修改 + 状态压缩)
- poj 2777 Count Color
- poj 2777 -- Count Color ( 线段树 )
- POJ 2777 count color(线段树,lazy标记)
- POJ 2777 Count Color 线段树染色问题+位运算表示状态
- POJ 2777 Count Color
- poj 2777 Count Color
- POJ 2777 Count Color (线段树成段更新+二进制思维)
- POJ 2777 Count Color(区间覆盖和区间查询)
- poj 2777 Count Color(线段树 区间更新)
- POJ 2777 Count Color ( 线段树&&位运算
- poj 2777 Count Color 线段树区间更新
- POJ 2777 Count Color
- poj 2777 Count Color 线段树
- poj 2777 Count Color(线段树区间更新+位运算)
- poj 2777 Count Color(线段树区间修改)
- POJ---2777 Count Color[线段树-求整段区间]