POJ 2777 Count Color 线段树
2013-09-30 16:33
309 查看
线段树的模板题。
#include <iostream> #include <cstring> #include <cstdlib> #include <cstdio> #include <queue> #include <algorithm> using namespace std; struct N { int l,r,col; bool MarkVisit; } st[400100]; void init(int l,int r,int site) { st[site].l = l; st[site].r = r; st[site].col = 1; st[site].MarkVisit = true;//标记为单色 if(l == r) return ; int mid = (l+r)>>1; init(l,mid,site<<1); init(mid+1,r,site<<1|1); } void updata(int l,int r,int col,int site) { if(l == st[site].l && r == st[site].r) { st[site].col = col; st[site].MarkVisit = true; return ; } if(st[site].MarkVisit && st[site].col == col) return ; int mid = (st[site].l + st[site].r)>>1; if(st[site].MarkVisit) { updata(st[site].l,mid,st[site].col,site<<1); updata(mid+1,st[site].r,st[site].col,site<<1|1); } st[site].MarkVisit = false; if(r <= mid) { updata(l,r,col,site<<1); } else if(mid < l) { updata(l,r,col,site<<1|1); } else { updata(l,mid,col,site<<1); updata(mid+1,r,col,site<<1|1); } } bool MarkColor[40]; int query(int l,int r,int site) { if(st[site].l <= l && r <= st[site].r && st[site].MarkVisit == true) { if(MarkColor[st[site].col] == false) { MarkColor[st[site].col] = true; return 1; } return 0; } int mid = (st[site].l + st[site].r)>>1; if(r <= mid) { return query(l,r,site<<1); } if(mid < l) { return query(l,r,site<<1|1); } return query(l,mid,site<<1) + query(mid+1,r,site<<1|1); } int main() { int len,t,o; int l,r,col; char op; while(scanf("%d %d %d",&len,&t,&o) != EOF) { init(1,len,1);//初始化 while(o--) { scanf("%*c%c",&op); if(op == 'C') { scanf("%d %d %d",&l,&r,&col); updata(l,r,col,1); } else { scanf("%d %d",&l,&r); memset(MarkColor,false,(t+2)*sizeof(bool)); printf("%d\n",query(l,r,1)); } } } 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 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(线段树基础)