hdu 5023
A Corrupt Mayor's Performance Art
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 100000/100000 K (Java/Others)
Total Submission(s): 1866 Accepted Submission(s): 650
something, then sell the worthless painting at a high price to someone
who wants to bribe him/her on an auction, this seemed a safe way for
mayor X to make money.
Because a lot of people praised mayor
X's painting(of course, X was a mayor), mayor X believed more and more
that he was a very talented painter. Soon mayor X was not satisfied with
only making money. He wanted to be a famous painter. So he joined the
local painting associates. Other painters had to elect him as the
chairman of the associates. Then his painting sold at better price.
The local middle school from which mayor X graduated, wanted to beat
mayor X's horse fart(In Chinese English, beating one's horse fart means
flattering one hard). They built a wall, and invited mayor X to paint on
it. Mayor X was very happy. But he really had no idea about what to
paint because he could only paint very abstract paintings which nobody
really understand. Mayor X's secretary suggested that he could make this
thing not only a painting, but also a performance art work.
This was the secretary's idea:
The wall was divided into N segments and the width of each segment
was one cun(cun is a Chinese length unit). All segments were numbered
from 1 to N, from left to right. There were 30 kinds of colors mayor X
could use to paint the wall. They named those colors as color 1, color 2
.... color 30. The wall's original color was color 2. Every time mayor X
would paint some consecutive segments with a certain kind of color, and
he did this for many times. Trying to make his performance art fancy,
mayor X declared that at any moment, if someone asked how many kind of
colors were there on any consecutive segments, he could give the number
immediately without counting.
But mayor X didn't know how to
give the right answer. Your friend, Mr. W was an secret officer of
anti-corruption bureau, he helped mayor X on this problem and gained his
trust. Do you know how Mr. Q did this?
For each test case:
The first line contains two integers, N and M ,meaning that the wall
is divided into N segments and there are M operations(0 < N <=
1,000,000; 0<M<=100,000)
Then M lines follow, each representing an operation. There are two kinds of operations, as described below:
1) P a b c
a, b and c are integers. This operation means that mayor X painted
all segments from segment a to segment b with color c ( 0 < a<=b
<= N, 0 < c <= 30).
2) Q a b
a and b are
integers. This is a query operation. It means that someone asked that
how many kinds of colors were there from segment a to segment b ( 0 <
a<=b <= N).
Please note that the operations are given in time sequence.
The input ends with M = 0 and N = 0.
segments. For color 1, print 1, for color 2, print 2 ... etc. And this
color sequence must be in ascending order.
P 1 2 3
P 2 3 4
Q 2 3
Q 1 3
P 3 5 4
P 1 2 7
Q 1 3
Q 3 4
P 5 5 8
Q 1 5
0 0
3 4
4 7
4
4 7 8
#include<stdio.h>
#include<algorithm>
#include<math.h>
#include<iostream>
using namespace std; const int MAXSIZE = 1000000;
int sum;
struct Tree{
int cover;
int color;
int l,r;
}tree[MAXSIZE<<2]; void pushUp(int idx){
tree[idx].color = tree[idx<<1].color|tree[idx<<1|1].color;
}
void pushDown(int i){
if(tree[i].cover){
tree[i<<1].color=tree[i].color ;
tree[i<<1|1].color=tree[i].color;
tree[i<<1].cover = tree[i<<1|1].cover = 1;
tree[i].cover = 0;
}
}
void build(int l,int r,int idx){
tree[idx].l = l;
tree[idx].r = r;
tree[idx].color =2; //这个题和hdu 2777 没什么不同,就是要初始化为2 The wall's original color was color 2.
tree[idx].cover = 1;
if(l==r) return;
int mid = (l+r)>>1;
build(l,mid,idx<<1);
build(mid+1,r,idx<<1|1);
pushUp(idx);
}
void update(int l,int r,int idx,int value){
if(tree[idx].l>=l&&tree[idx].r<=r){
tree[idx].color = value;
tree[idx].cover = 1;
return;
}
pushDown(idx);
int mid = (tree[idx].l+tree[idx].r)>>1;
if(r<=mid) update(l,r,idx<<1,value);
else if(l>mid) update(l,r,idx<<1|1,value);
else {
update(l,mid,idx<<1,value);
update(mid+1,r,idx<<1|1,value);
}
pushUp(idx);
}
void query(int l,int r,int idx){
if(tree[idx].l>=l&&tree[idx].r<=r){
sum|=tree[idx].color;
return;
}
if(tree[idx].cover) {
sum|=tree[idx].color;
return;
}
int mid = (tree[idx].l+tree[idx].r)>>1;
if(r<=mid) query(l,r,idx<<1);
else if(l>mid) query(l,r,idx<<1|1);
else {
query(l,mid,idx<<1);
query(mid+1,r,idx<<1|1);
}
}
void solve(){
int a[30];
//printf("%d\n",sum);
int k=0,t=0;
while(sum){
if(sum&1) a[k++] = t+1;
t++;
sum = sum>>1;
}
for(int i=0;i<k-1;i++) printf("%d ",a[i]);
printf("%d\n",a[k-1]);
}
int main()
{
int n,m;
while(scanf("%d%d",&n,&m),n+m){
build(1,n,1);
while(m--){
char s[5];
scanf("%s",s);
if(s[0]=='P'){
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
update(a,b,1,1<<(c-1));
}else{
int a,b;
scanf("%d%d",&a,&b);
sum = 0;
query(a,b,1);
solve();
}
}
}
return 0;
}
hdu 5023的更多相关文章
- HDU 5023 A Corrupt Mayor's Performance Art 线段树区间更新+状态压缩
Link: http://acm.hdu.edu.cn/showproblem.php?pid=5023 #include <cstdio> #include <cstring&g ...
- HDU 5023 A Corrupt Mayor's Performance Art(线段树区间更新)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5023 解题报告:一面墙长度为n,有N个单元,每个单元编号从1到n,墙的初始的颜色是2,一共有30种颜色 ...
- hdu 5023 线段树+状压
http://acm.hdu.edu.cn/showproblem.php?pid=5023 在片段上着色,有两种操作,如下: 第一种:P a b c 把 a 片段至 b 片段的颜色都变为 c . 第 ...
- hdu 5023 线段树
成端更新+统计区间内的值 挺模板的题... 一开始没想起来用set统计,傻傻地去排序了[大雾 #include<iostream> #include<cstdio> #incl ...
- HDU 5023 A Corrupt Mayor's Performance Art (据说是线段树)
题意:给定一个1-n的墙,然后有两种操作,一种是P l ,r, a 把l-r的墙都染成a这种颜色,另一种是 Q l, r 表示,输出 l-r 区间内的颜色. 析:应该是一个线段树+状态压缩,但是我用s ...
- 2014 网选 广州赛区 hdu 5023 A Corrupt Mayor's Performance Art
#include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #d ...
- hdu 5023 A Corrupt Mayor's Performance Art 线段树
A Corrupt Mayor's Performance Art Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 100000/100 ...
- HDU 5023线段树区间染色,统计区间内颜色个数
这个也是一个线段树的模板 #include<iostream> #include<string.h> #include<algorithm> #include< ...
- hdu 5023 线段树+位运算
主要考线段树的区间修改和区间查询,这里有一个问题就是这么把一个区间的多种颜色上传给父亲甚至祖先节点,在这里题目告诉我们最多30颜色,那么我们可以把这30中颜色用二进制储存和传给祖先节点,二进制的每一位 ...
随机推荐
- Object.defineProperty基本用法
1. 基本形式 Object.defineProperty(obj,prop,descriptor) 参数说明: obj: 必需,目标对象prop: 必需,需定义或修改属性的名字descriptor: ...
- 转ajax的jsonp的文章
转:http://justcoding.iteye.com/blog/1366102/ Js是不能跨域请求.出于安全考虑,js设计时不可以跨域. 什么是跨域: 1.域名不同时. 2.域名相同,端口不同 ...
- Item 12 考虑实现Comparable接口
1.Comparable接口,用来做什么. 2.判定类实现的Comparable接口是否正确的方法. 3.不要扩展一个已经实现了Comparable接口的类来增加用于比较的值组件. 1.Com ...
- 【BZOJ3339&&3585】mex [莫队][分块]
mex Time Limit: 20 Sec Memory Limit: 128 MB[Submit][Status][Discuss] Description 有一个长度为n的数组{a1,a2,. ...
- 第八周 yukun 20155335
- 基本控件文档-UISlider属性---iOS-Apple苹果官方文档翻译
本系列所有开发文档翻译链接地址:iOS7开发-Apple苹果iPhone开发Xcode官方文档翻译PDF下载地址 //转载请注明出处--本文永久链接:http://www.cnblogs.com/C ...
- [POI2004] SZP (贪心+拓扑排序)
[问题描述] Byteotian 中央情报局(BIA) 雇佣了许多特工. 他们每个人的工作就是监视 另一名特工. Byteasar 国王需要进行一次秘密行动,所以他要挑选尽量多的信得过的特工. 但 是 ...
- React的单向数据流与组件间的沟通
今天来给大家总结下React的单向数据流与组件间的沟通. 首先,我认为使用React的最大好处在于:功能组件化,遵守前端可维护的原则. 先介绍单向数据流吧. React单向数据流: React是单向数 ...
- 加overflow-hidden就可以解决高度塌陷问题,overflow-触发BFC
1.BFC 全称是块级排版上下文,用于对块级元素排版,默认情况下只有根元素(body)一个块级上下文,但是如果一个块级元素 设置了float:left,overflow:hidden或position ...
- application.properties 文件的优先级
bootstrapProperties #来自configServer的值 commandLineArgs #命令行参数 servletConfigInitParams servletContextI ...