【poj2777】Count Color
来源:互联网 发布:js访问frame 编辑:程序博客网 时间:2024/06/14 15:42
被小伙伴拉着做的题,线段树的裸题,小伙伴开的布尔数组,我直接2进制压位,15分钟写完半个小时都没调出来,出去吃了点东西,回来十分钟调出来了,原来是因为第一次写压位的线段树然后pushdown函数就给写丑了,很简单的一道题
要想好tag表示的东西,是位数还是一个二进制数
注意pushdown函数中val与tag存值的统一性
#include<cstdio>#include<cstring>#include<string>#include<algorithm>#include<iostream>using namespace std;const int N=100010;int n,m,T,qx;struct seg{ int l,r,tag,val;}tr[500010];void updata(int k){tr[k].val=tr[k<<1].val|tr[k<<1|1].val;}void pushdown(int k){ if(!tr[k].tag||tr[k].l==tr[k].r)return; tr[k<<1].tag=tr[k<<1|1].tag=tr[k].tag; tr[k<<1].val=tr[k<<1|1].val=1<<(tr[k].tag-1); tr[k].tag=0;}void build(int k,int l,int r){ tr[k].l=l,tr[k].r=r;tr[k].tag=0,tr[k].val=1; if (l==r)return; int mid=(l+r)>>1; build(k<<1,l,mid); build(k<<1|1,mid+1,r); updata(k);}void change(int k,int x,int y,int z){ pushdown(k); int l=tr[k].l,r=tr[k].r; if (x<=l&&r<=y) { tr[k].val=1<<(z-1); tr[k].tag=z; return; } int mid=(l+r)>>1; if (x<=mid)change(k<<1,x,y,z); if (y>mid)change(k<<1|1,x,y,z); updata(k);}void query(int k,int x,int y){ pushdown(k); int l=tr[k].l,r=tr[k].r; if (x<=l&&r<=y) { qx=qx|tr[k].val; return; } int mid=(l+r)>>1; if (x<=mid)query(k<<1,x,y); if (y>mid)query(k<<1|1,x,y); updata(k);}int main() { char ch[2]; int x,y,z; scanf("%d%d%d",&n,&T,&m); build(1,1,n); for (int i=1;i<=m;++i) { scanf("%s",ch); if (ch[0]=='C') { scanf("%d%d%d",&x,&y,&z); if (x>y)swap(x,y); change(1,x,y,z); } else { scanf("%d%d",&x,&y); if (x>y)swap(x,y); qx=0;z=0; query(1,x,y); while(qx) { if (qx&1)z++; qx>>=1; } printf("%d\n",z); }// for (int i=1;i<=30;++i)// cout<<tr[i].l<<' '<<tr[i].r<<' '<<tr[i].tag<<' '<<tr[i].val<<endl; }}
0 0
- Count Color[poj2777]
- poj2777 Count Color
- poj2777 Count Color
- POJ2777--Count Color
- POJ2777 Count Color
- POJ2777 Count Color
- poj2777:Count Color
- poj2777 Count Color
- poj2777 Count Color
- poj2777 Count Color
- poj2777 Count Color
- POJ2777-Count Color
- 【poj2777】Count Color
- poj2777-Count Color
- poj2777——Count Color
- POJ2777 Count Color 线段树
- 【poj2777】【线段树】Count Color
- [poj2777 Count Color]线段树
- Linux中audit日志的使用方法
- centos6.5LVM磁盘管理
- java并发编程(二十三)----(JUC集合)ConcurrentSkipListMap介绍
- 《Combined Task and Motion Planning Through an Extensible Planner-Independent Interface Layer》
- 学习设计模式笔记--适配器模式
- 【poj2777】Count Color
- HTTP中get和post的区别
- 将eclipse与github相关联实现版本控制
- gcc常用编译选项的含义
- 对于摄像机而言同样清晰度下25p和50i画质会有什么差别?
- tbb 编译
- JAVA命令参数
- 2015携程JAVA工程师笔试题(基础却又没多少人做对的面向对象面试题)
- 求解最长公共子序列问题(LCS)