POJ2777---线段树
2012-03-06 00:24
253 查看
成段更新,在节点处lazy标记有很大帮助,有了lazy标记每次更新时就不用更新到底了。
#include <iostream> #include<stdio.h> #include<string.h> #include<algorithm> using namespace std; #define N 100005 int n,m,t,sum; char str[2]; bool color[33]; struct TNode { int l,r,color; } node[4*N]; void build(int root,int l,int r) { node[root].color=1; node[root].l=l,node[root].r=r; if(l+1>=r) return ; int mid=(l+r)>>1,p=root<<1; build(p,l,mid); build(p+1,mid,r); } void insert(int root,int l,int r,int c) { int mid,p=root<<1; if(node[root].l==l&&node[root].r==r) { node[root].color=c; return ; } if(node[root].color==c) return ; if(node[root].color>0) { node[p].color=node[root].color; node[p+1].color=node[root].color; node[root].color=0; } mid=(node[root].l+node[root].r)>>1; if(r<=mid) insert(p,l,r,c); else if(l>=mid) insert(p+1,l,r,c); else { insert(p,l,mid,c); insert(p+1,mid,r,c); } } void query(int root,int l,int r) { int mid,p; if(node[root].color>0) { if(!color[node[root].color]) { color[node[root].color]=1; sum++; } return ; } mid=(node[root].l+node[root].r)>>1; p=root<<1; if(r<=mid) query(p,l,r); else if(l>=mid) query(p+1,l,r); else { query(p,l,mid); query(p+1,mid,r); } } int main() { scanf("%d%d%d",&n,&m,&t); int l,r,c; build(1,0,n); while(t--) { scanf("%s%d%d",str,&l,&r); if(l>r) swap(l,r); if(str[0]=='C') { scanf("%d",&c); insert(1,l-1,r,c); } else { memset(color,0,sizeof(color)); sum=0; query(1,l-1,r); printf("%d\n",sum); } } return 0; }
相关文章推荐
- poj 2777 count color解题报告【线段树】
- POJ 2777——Count Color(线段树,区间染色+简单hash)
- POJ 2777 Count Color (二进制或 线段树)
- poj2777--Count Color(线段树,二进制转化)
- POJ 题目2777 Count Color(线段树,区间查询染色数)
- poj 2777,hdu 5023 线段树区间染色+lazy+位运算
- 【线段树(lazy)】poj 2777 Count Color
- POJ 2777 线段树
- [poj] 2777 - Count Color - 线段树 + 状态压缩思想(?)
- poj 2777 Count Color (线段树 + 覆盖标记)
- POJ 2777 线段树
- poj 2777 Count Color(线段树)
- POJ 2777 Count Color(线段树,区间更新,查询)
- poj 2777 Count Color(线段树)
- POJ 2777-Count Color(线段树-区间染色查询)
- poj 2777 Count Color(线段树区间更新+技巧)
- POJ 2777 线段树
- POJ 2777 Count Color(线段树区间更新)
- poj 2777 Count Color(线段树区间更新)
- POJ 2777(线段树,区间更新,使用二进制染色问题)