hdu-5023 A Corrupt Mayor's Performance Art (线段树区间修改)
来源:互联网 发布:淘宝聚划算怎么抢最快 编辑:程序博客网 时间:2024/05/22 03:07
今天集训队打比赛的一道题,很明显是个线段树,我们队照着lrj蓝书敲了一通,机智的将修改值和加和改成了位运算:|=
但是好像哪里出了点小问题,就是不对,赛后又水了一遍,竟然过了。。。发现还是lrj的书好啊,市面上的模板一点也不好用,连区间修改都没有 。
等集训完了要静心好好系统的学习一下线段树 。 多看多刷lrj的书 。
细节参见代码:
#include<bits/stdc++.h>using namespace std;const int maxn = 1000000 + 5;int n,m,_sum,v,a,b,y11,y22,c,setv[maxn * 3],sumv[maxn * 3];char cmd[5];void pushdown(int o) { int lc = o*2 , rc = o*2 + 1; if(setv[o] >= 0) { setv[lc] = setv[rc] = setv[o] ; setv[o] = -1; }}void maintain(int o,int L,int R) { int lc = o*2 , rc = o*2 + 1; sumv[o] = 0; if(R > L) { sumv[o] = sumv[lc] | sumv[rc]; } if(setv[o] >= 0) { sumv[o] = setv[o]; return ; } return ;}void update(int o,int L,int R) { int lc = o*2 , rc = o*2 + 1; if(y11 <= L && y22 >= R) setv[o] = v; else { pushdown(o); int m = L + (R-L)/2; if(y11 <= m) update(lc,L,m); else maintain(lc,L,m); if(y22 > m) update(rc,m+1,R); else maintain(rc,m+1,R); } maintain(o,L,R);}void query(int o,int L,int R) { if(setv[o] >= 0) { _sum |= setv[o]; } else if(y11 <= L && y22 >= R) { _sum |= sumv[o]; } else { int m = L + (R-L)/2; if(y11 <= m) query(o*2 , L , m) ; if(y22 > m) query(o*2 + 1, m+1, R); }}int main() { while(~scanf("%d%d",&n,&m)) { if( !n && !m ) return 0; v = 2; y11 = 1; y22 = n; update(1,1,n); while(m--) { scanf("%s",cmd); if(cmd[0] == 'P') { scanf("%d%d%d",&y11,&y22,&c); v = (1<<(c-1)); update(1,1,n); } else { scanf("%d%d",&y11,&y22); _sum = 0; query(1,1,n); bool ok = true; for(int i=0;i<30;i++) if(_sum & (1<<i)) { if(ok) printf("%d",i+1); else printf(" %d",i+1); ok = false; } printf("\n"); } } } return 0;}
1 0
- hdu-5023 A Corrupt Mayor's Performance Art (线段树区间修改)
- HDU 5023 A Corrupt Mayor's Performance Art(线段树区间更新)
- hdu 5023 A Corrupt Mayor's Performance Art(线段树区间合并)
- HDU 5023 A Corrupt Mayor's Performance Art (线段树区间更新,入门详解)
- 【HDU】5023 A Corrupt Mayor's Performance Art 线段树
- hdu 5023 A Corrupt Mayor's Performance Art(线段树)
- HDU 5023 A Corrupt Mayor's Performance Art (线段树)
- hdoj 5023 A Corrupt Mayor's Performance Art 【线段树区间修改 + 状压】
- HDU 5023 A Corrupt Mayor's Performance Art(线段树区间更新)
- hdu 5023 A Corrupt Mayor's Performance Art (线段树+区间更新+状压)
- HDU 5023 A Corrupt Mayor's Performance Art 线段树 区间染色
- hdu 5023 A Corrupt Mayor's Performance Art(线段树区间更新)
- HDU 5023 - A Corrupt Mayor's Performance Art(线段树区间更新+状态压缩)
- HDU - 5023 A Corrupt Mayor's Performance Art(区间修改)
- 【线段树】 HDU 5025 A Corrupt Mayor's Performance Art
- HDU 5023 A Corrupt Mayor's Performance Art (线段树)
- HDU 5023 A Corrupt Mayor's Performance Art(线段树+优美的位运算)
- HDU 5023 A Corrupt Mayor's Performance Art (线段树)
- CLGeocode编码类的讲解
- 字典树
- 用dfs序维护树结构
- 字符串中空格换成%20
- 2367 Genealogical tree
- hdu-5023 A Corrupt Mayor's Performance Art (线段树区间修改)
- 扩展欧几里德算法详解(转)
- 最励志语句!——冲向阿里,反正光脚的不怕穿鞋的
- LCS(最长公共子序列) GST(最长公共子串,广义后缀树)
- 如何在tomcat安装部署php项目
- python菜鸟日记7
- HWOJ 超长正整数相加
- POJ 1611 The Suspects
- 亚马逊AWS学习——多网络接口下配置EC2实例连接公网的一个“bug”