hdu 5023 A Corrupt Mayor's Performance Art(线段树+位运算)
来源:互联网 发布:奥卡福 知乎 编辑:程序博客网 时间:2024/05/16 03:15
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=5023
解题思路:
题目大意:
一开始所有结点的颜色均为2类,然后给你两种操作:
P a b c
将a到b区间全部图为c类
Q a b
输出a到b区间所有点的颜色种类。
算法思想:
线段树区间更新,用位运算存储区间颜色状态。。。
AC代码:
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#define INF 0xfffffffusing namespace std;const int N = 1000010;struct node{ int l,r; int setv; int color;}tree[N<<2];void build(int id,int l,int r){//id:index tree[id].l = l; tree[id].r = r; tree[id].setv = 0; tree[id].color = 2; if(l == r) return; int mid = (l+r)>>1; build(id<<1,l,mid); build(id<<1|1,mid+1,r);}void pushup(int id){ tree[id].color = tree[id<<1].color | tree[id<<1|1].color;}void pushdown(int id){ if(tree[id].setv){ int tmp = tree[id].setv; tree[id<<1].color = (1<<(tmp-1)); tree[id<<1|1].color = (1<<(tmp-1)); tree[id<<1].setv = tree[id<<1|1].setv = tmp; tree[id].setv = 0; }}void update(int id,int l,int r,int val){ if(tree[id].l >= l && tree[id].r <= r){ tree[id].setv = val; tree[id].color = (1<<(val-1)); return; } pushdown(id); int mid = (tree[id].l+tree[id].r)>>1; if(l <= mid) update(id<<1,l,r,val); if(mid < r) update((id<<1)|1,l,r,val); pushup(id);}int query(int id,int l,int r){ if(tree[id].l >= l && tree[id].r <= r){ return tree[id].color; } pushdown(id); int mid = (tree[id].l+tree[id].r)>>1; int ans = 0; if(l <= mid) ans |= query(id<<1,l,r); if(mid < r) ans |= query(id<<1|1,l,r); pushup(id); return ans;}int main(){ int n,m; while(scanf("%d%d",&n,&m),n+m){ build(1,1,n); char op[10]; int a,b,c; while(m--){ scanf("%s",op); if(op[0] == 'P'){ scanf("%d%d%d",&a,&b,&c); update(1,a,b,c); } else{ scanf("%d%d",&a,&b); int ans = query(1,a,b); int flag = 1; for(int i = 0; i < 30; i++){ if(ans & (1<<i)){ if(flag == 1) printf("%d",i+1); else printf(" %d",i+1); flag++; } } printf("\n"); } } } return 0;}
0 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-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(线段树)
- 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(线段树+状压)
- hdu5023A Corrupt Mayor's Performance Art(线段树+位运算) poj 2777Count Color(线段树+位运算)
- ios开发-新浪微博-09(下拉菜单封装一)
- 计算机网络学习 :互联网与万维网的区别
- XML解析 JSON解析
- Effective C++——条款43(第7章)
- 调用系统的Camera和相册/压缩照片
- hdu 5023 A Corrupt Mayor's Performance Art(线段树+位运算)
- (新手向)幻想战境DEMO(二)
- Android 二维码扫描 YUV字节数组转换成bitmap
- Java语言的基础语法(二)
- ViewController的生命周期分析和使用
- Android学习笔记之——Spinner
- 类与类之间的关系
- Photoshop的动作
- ActiveMQ 即时通讯服务 浅析