POJ 2777 线段树 线段染色 基础题
2013-10-01 14:22
344 查看
#include "stdio.h" #include "string.h" #include "math.h" #include "stdlib.h" #include "algorithm" using namespace std; struct comp { int l,r,mid; int lazy,color; } data[300001]; int hash[50]; int ans; void build(int l,int r,int k) { data[k].l=l; data[k].r=r; data[k].mid=(l+r)/2; data[k].color=1; data[k].lazy=-1; if (l==r) return ; build(l,data[k].mid,k*2); build(data[k].mid+1,r,k*2+1); } void Pushdown(int k) { if (data[k].l==data[k].r) return ; if (data[k].lazy!=-1) { data[k*2].lazy=data[k*2+1].lazy=data[k].lazy; data[k].lazy=-1; data[k*2].color=data[k*2+1].color=data[k*2].lazy; } } void update(int l,int r,int k,int op) { Pushdown(k); if (data[k].l==l && data[k].r==r) { data[k].color=op; data[k].lazy=op; return ; } if (r<=data[k].mid) update(l,r,k*2,op); else if (l>data[k].mid) update(l,r,k*2+1,op); else { update(l,data[k].mid,k*2,op); update(data[k].mid+1,r,k*2+1,op); } if (data[k*2].color==data[k*2+1].color ) data[k].color=data[k*2].color; else data[k].color=-1; } void query(int l,int r,int k) { if (data[k].color!=-1 || data[k].l==data[k].r) { if (hash[data[k].color]==0) ans++; hash[data[k].color]=1; return ; } if (r<=data[k].mid) query(l,r,k*2); else if (l>data[k].mid) query(l,r,k*2+1); else { query(l,data[k].mid,k*2); query(data[k].mid+1,r,k*2+1); } } int main() { int n,t,m,x,y,z; char ch[10]; while (scanf("%d%d%d",&n,&t,&m)!=EOF) { build(1,n,1); while (m--) { scanf("%s",ch); if (ch[0]=='C') { scanf("%d%d%d",&x,&y,&z); if (x>y) swap(x,y); update(x,y,1,z); } else { scanf("%d%d",&x,&y); if (x>y) swap(x,y); memset(hash,0,sizeof(hash)); ans=0; query(x,y,1); printf("%d\n",ans); } } } return 0; }
相关文章推荐
- poj 2777,hdu 5023 线段树区间染色+lazy+位运算
- 线段树染色模板,用于颜色较少的情况。 POJ 2777
- poj 2777 线段树(区间染色)
- POJ 2777-Count Color(线段树-区间染色查询)
- poj 2777 Count Color 基础线段树,带给的初学者噩梦!!!
- POJ 2777 Count Color(线段染色 区间更新)
- POJ 2777(线段树,区间更新,使用二进制染色问题)
- 线段树区间染色 浮水法 学习小记 Poj 2777 + Poj 2528
- POJ训练计划2777_Count Color(线段树/成段更新/区间染色)
- poj 2777 ——线段树基础
- POJ 题目2777 Count Color(线段树,区间查询染色数)
- poj 1436 Horizontally Visible Segments(线段树基础,区间染色,拆点)
- POJ 2777 Count Color(线段树染色,二进制优化)
- POJ 2777——Count Color(线段树,区间染色+简单hash)
- Poj 2777 Count Color(线段树基础)
- POJ 2777 Count Color (线段树 区间覆盖染色问题)
- poj 2777 Count Color(线段树+染色问题)
- poj 2777(线段树+区间染色)
- hdu 5023 && poj 2777(线段染色)2014 ACM/ICPC Asia Regional 广州 Online
- poj_2777 Count Color(线段树染色)