poj2777 线段树
来源:互联网 发布:淘宝客服图片大全 编辑:程序博客网 时间:2024/05/17 08:43
题意:给一些线段区间染色,然后问你一段区间的不同颜色的个数
分析:因为颜色比较小 可以压缩为二进制表示
细节详见代码
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;#define lson l,mid,rt<<1#define rson mid+1,r,rt<<1|1const int maxn = 1e5 + 20;struct InterxTree{int sum[maxn<<2],set[maxn<<2];void build(){ sum[1]=1,set[1]=1;}void pushDown(int rt){ sum[rt<<1]=sum[rt<<1|1]=1<<(set[rt]-1); set[rt<<1]=set[rt<<1|1]=set[rt]; set[rt]=-1;}void maintain(int rt){sum[rt]=sum[rt<<1]|sum[rt<<1|1];}void update(int L,int R,int v,int l,int r,int rt){ if(L<=l&&r<=R) { set[rt]=v; sum[rt]=1<<(v-1); return ; } if(~set[rt]) pushDown(rt); int mid=(l+r)>>1; if(L<=mid) update(L,R,v,lson); if(R>mid) update(L,R,v,rson); maintain(rt);}int query(int L,int R,int l,int r,int rt){ if(L<=l&&r<=R) { return sum[rt]; } if(~set[rt]) // 查询时候不用pushdown 减少时间浪费 { return 1<<(set[rt] -1);} int mid=(l+r)>>1; int ans = 0; if(L<=mid) ans |=query(L,R,lson); if(R>mid) ans |=query(L,R,rson); return ans;}}tree;int main(){//freopen("1.txt","r",stdin); int l,t,o; while(~scanf("%d %d %d",&l,&t,&o)) { tree.build(); while(o--) { char d = getchar(); int a,b,c; while(!isalpha(d)) d = getchar(); if(d=='C') { scanf("%d %d %d",&a,&b,&c); if(b<a) swap(a,b); tree.update(a,b,c,1,l,1); } else { scanf("%d %d",&a,&b); if(b<a) swap(a,b); printf("%d\n",__builtin_popcount(tree.query(a,b,1,l,1))); // 数1的个数 } }} return 0;}
0 0
- 线段树模板 poj2777
- POJ2777---线段树
- 线段树-POJ2777
- POJ2777(线段树)
- poj2777线段树
- poj2777 线段树
- poj2777(线段树)
- POJ2777线段树....
- POJ2777线段树
- poj2777(线段树)
- POJ2777【线段树】
- POJ2777 Count Color 线段树
- 线段树典型例题--poj2777
- 【poj2777】【线段树】Count Color
- poj2777线段树+lazy思想
- poj2777(延迟更新+线段树)
- 线段树区间更新poj2777
- 线段树 POJ2777 && 一些体会
- 2016.8.11纪中比赛总结
- Python爬虫之抓取豆瓣信息 全部网页显示
- Xftp上传文件显示未知错误
- 13、生产者消费者模型_两种实现方式
- Miscellaneous | 博文太旧,已清空
- poj2777 线段树
- 第一次在CSDN写blog
- PL/sql 使用技巧
- 2016.7.21纪中比赛总结
- 【《大型网站技术架构-核心原理与案例分析》学习笔记】大型网站架构演化(一)
- C++ hdoj 2025 查找最大元素
- poj2836 状压dp
- Spring面试问答Top 25
- UVa 455 Periodic Strings(周期串)