poj 2777 Count Color(线段树)
2017-05-03 17:09
477 查看
和poj 2528差不多
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 const int MAXN = 100010; //col[rt]=-1 表示rt节点管理的区间内的颜色是不同的颜色 //col[rt] != -1 表示当前区间都是同一种颜色 int col[MAXN<<2]; //查询的时候用于标记颜色 int mark[33]; int res; void build(int l, int r, int rt) { col[rt] = 1; if(l == r) return; int m = (l+r) >> 1; build(lson); build(rson); } void pushDown(int l, int r, int rt) { if(col[rt] != -1) { col[rt<<1] = col[rt<<1|1] = col[rt]; col[rt] = -1; } } void update(int L, int R, int c, int l, int r, int rt) { if(l >= L && r <= R) { col[rt] = c; return ; } //假设当前区间都是同一种颜色,(L,R)和当前区间有交集,则要把当前区间 //之前标记的颜色都推到子节点,然后再递归去更新需要更新的区间 pushDown(l,r,rt); int m = (l+r) >> 1; if(L <= m) update(L,R,c,lson); if(R > m) update(L,R,c,rson); } void query(int L, int R, int l, int r ,int rt) { if(col[rt] != -1) { if(mark[col[rt]] == 0) { mark[col[rt]] = 1; res++; } return; } if(l == r) return; int m = (l+r) >> 1; if(L <= m) query(L,R,lson); if(R > m) query(L,R,rson); } int main() { int L,T,O; char ch; int a,b,c; while(scanf("%d %d %d",&L,&T,&O) != EOF) { build(1,L,1); while(O--) { scanf(" %c",&ch); if(ch == 'C') { scanf("%d %d %d",&a,&b,&c); update(a,b,c,1,L,1); } else { scanf("%d %d",&a,&b); res = 0; memset(mark,0,sizeof(mark)); query(a,b,1,L,1); printf("%d\n",res); } } } return 0; }
相关文章推荐
- poj 2777 Count Color(线段树 区间更新)
- 线段树区间更新,区间统计 poj 2777 Count Color
- hdu5023A Corrupt Mayor's Performance Art(线段树+位运算) poj 2777Count Color(线段树+位运算)
- POJ 2777 Count Color(线段树)
- POJ 2777 Count Color (线段树区间更新加查询)
- poj 2777 Count Color(线段树 Lazy-Tag思想 成段更新+区间统计)
- 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(线段树、lazy思想)
- 【线段树(lazy)】poj 2777 Count Color
- POJ 2777 Count Color(线段树区间修改+位运算)
- POJ 2777 Count Color (线段树区间修改 + 状态压缩)