POJ 2777 Count Color(线段树 区间更新)
2013-06-03 10:38
423 查看
题目链接
根据区间更新的模版改改。线段树真的很不熟悉,交了很多次。
根据区间更新的模版改改。线段树真的很不熟悉,交了很多次。
#include <stdio.h> #include <string.h> #include <iostream> using namespace std; #define N 100001 #define LL __int64 int p[4*N],lz[4*N]; void pushup(int rt) { p[rt] = p[rt<<1]|p[rt<<1|1]; } void pushdown(int rt) { if(lz[rt]) { lz[rt<<1] = lz[rt]; lz[rt<<1|1] = lz[rt]; p[rt<<1] = lz[rt]; p[rt<<1|1] = lz[rt]; lz[rt] = 0; } } void build(int l,int r,int rt) { int m; lz[rt] = 0; if(l == r) { p[rt] = 1; return ; } m = (l+r)>>1; build(l,m,rt<<1); build(m+1,r,rt<<1|1); pushup(rt); } int query(int L,int R,int l,int r,int rt) { int m,ans; ans = 0; if(l >= L&&r <= R) { return p[rt]; } pushdown(rt); m = (l+r)>>1; if(L <= m) ans |= query(L,R,l,m,rt<<1); if(R > m) ans |= query(L,R,m+1,r,rt<<1|1); return ans; } void update(int L,int R,int l,int r,int rt,int sc) { int m; if(l >= L &&r <= R) { lz[rt] = sc; p[rt] = sc; return ; } pushdown(rt); m = (l+r)>>1; if(L <= m) update(L,R,l,m,rt<<1,sc); if(R > m) update(L,R,m+1,r,rt<<1|1,sc); pushup(rt); } int main() { int n,m,k,i,a,b,c,ans,t,j; char ch[11]; while(scanf("%d%d%d",&n,&m,&k)!=EOF) { build(1,n,1); for(i = 1;i <= k;i ++) { scanf("%s",ch); if(ch[0] == 'C') { scanf("%d%d%d",&a,&b,&c); if(a > b) swap(a,b); update(a,b,1,n,1,1<<(c-1)); } else { scanf("%d%d",&a,&b); if(a > b) swap(a,b); ans = query(a,b,1,n,1); t = 0; for(j = 0;j < m;j ++) if(ans&(1<<j)) t ++; printf("%d\n",t); } } } 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[线段树区间更新查询]
- POJ 2777Count Color (线段树区间更新 + 位运算压缩)
- POJ 2777 Count Color (线段树区间更新)
- POJ 2777 Count Color 线段树 区间更新
- POJ 2777 Count Color(线段树区间更新)
- POJ 2777 Count Color 【线段树 区间更新 按位或运算】
- poj 2777 Count Color(位运算+线段树区间更新 可用bitset记录)
- 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 tag)
- poj_2777Count Color线段树_区间更新