CDOJ1259 昊昊爱运动 II (线段树+bitset)
来源:互联网 发布:巨人网络上市涨幅图 编辑:程序博客网 时间:2024/05/16 05:13
题目链接
使用bitset保存每一段区间的不同的数的数量,线段树节点,存bitset,bitset可以使用二进制位运算
#include<cstdio>#include<cstring>#include<algorithm>#include<string>#include<vector>#include<iostream>#include<bitset>using namespace std;#define LL long long#define cl(a,b) memset(a,b,sizeof(a))#define pb push_backconst int maxn = 2000005;const int inf = 1<<28;const LL mod = 1000000007;int n,m;struct node{ bitset<110> sum; int lazy;}p[maxn];void push_up(int rt){ p[rt].sum=p[rt<<1].sum|p[rt<<1|1].sum;}void push_down(int rt){ if(p[rt].lazy==0)return ; p[rt<<1].sum.reset(); p[rt<<1|1].sum.reset(); p[rt<<1].sum[p[rt].lazy]=p[rt<<1|1].sum[p[rt].lazy]=1; p[rt<<1].lazy=p[rt<<1|1].lazy=p[rt].lazy; p[rt].lazy=0;}void build(int rt,int l,int r){ if(l==r){ p[rt].sum.reset(); p[rt].lazy=0;//0:none int x;scanf("%d",&x); p[rt].sum[x]=1; return ; } int mid=l+r>>1; build(rt<<1,l,mid); build(rt<<1|1,mid+1,r); push_up(rt);}void update(int rt,int l,int r,int x,int y,int v){ if(x<=l&&r<=y){ p[rt].sum.reset(); p[rt].lazy=v;// p[rt].sum[v]=1; return ; } int mid = l+r>>1; push_down(rt); if(x<=mid){ update(rt<<1,l,mid,x,y,v); } if(y>mid){ update(rt<<1|1,mid+1,r,x,y,v); } push_up(rt);}bitset<110> query(int rt,int l,int r,int x,int y){ //printf("l = %d, r = %d\n",l,r); if(x<=l&&r<=y){ return p[rt].sum; } int mid=l+r>>1; bitset<110> res; push_down(rt); if(x<=mid){ res|=query(rt<<1,l,mid,x,y); } if(y>mid){ res|=query(rt<<1|1,mid+1,r,x,y); } push_up(rt); return res;}int main(){ while(~scanf("%d%d",&n,&m)){ build(1,1,n); int q;scanf("%d",&q); while(q--){ char op[2];scanf("%s",op); if(op[0]=='M'){ int x,y,v;scanf("%d%d%d",&x,&y,&v); update(1,1,n,x,y,v); } else { int x,y; scanf("%d%d",&x,&y); printf("%d\n",query(1,1,n,x,y).count()); } } } return 0;}
0 0
- CDOJ1259 昊昊爱运动 II (线段树+bitset)
- cdoj1259 线段树+bitset
- 2016 UESTC Training for Data Structures Q - 昊昊爱运动 II 线段树+延迟操作+bitset
- 2016 UESTC Training for Data Structures Q - 昊昊爱运动 II CDOJ 1259 线段树+bitset
- 【CDOJ 1259】 昊昊爱运动Ⅱ 【bitset状压+线段树】
- 【cdoj 1259】昊昊爱运动 bitset
- cdoj 1259 线段树+bitset
- 昊昊爱运动 II
- Summer Training day6 codeforces633G 线段树、bitset
- codeforces dfs序+线段树+bitset
- 线段树查询 II
- 线段树查询 II
- 线段树查询 II
- bitset+DFS序+线段树 Codeforces633G Yash And Trees
- [线段树维护BITSET] NOI2017 .Day1 T1 整数
- 线段树的构造 II
- 线段树查询 II-LintCode
- POJ_2464 Brownie Points II 线段树
- 编程中常用的单词缩写
- 导航栏使用不透明的图片时,控制器view的y值
- linux下安装zookeeper
- LAMP(Linux+Apache+Mysql+PHP)环境搭建
- 解决listview更新数据时,屏幕闪烁的问题
- CDOJ1259 昊昊爱运动 II (线段树+bitset)
- C#标识符的命名规则
- linux下make命令参数解析
- JAVA生成二维码
- linux设置文件描述符
- 窗体间参数传递的方法
- Eclipse插件——EasyExplore安装
- Xcode管理工具--Alcatraz
- 编写一个进制转换器