hdu 5023 线段树延迟更新+状态压缩
/*
线段树延迟更新+状态压缩
*/
#include<stdio.h>
#define N 1100000
struct node {
int x,y,yanchi,sum;
}a[N*4];
int lower[31];
void build(int t,int x,int y) {
a[t].x=x;
a[t].y=y;
a[t].yanchi=0;
if(x==y){
a[t].sum=lower[1];
return ;
}
int temp=t<<1;
int mid=(x+y)/2;
build(temp,x,mid);
build(temp+1,mid+1,y);
a[t].sum=a[temp].sum|a[temp+1].sum;
}
void inset(int t,int x,int y,int c) {
//printf("%d %d %d\n",a[t].yanchi,a[t].x,a[t].y);
if(a[t].x==x&&a[t].y==y) {
a[t].yanchi=lower[c];
a[t].sum=lower[c];//sum和yanchi都需要改变
// printf("%d %d %d\n",x,y,lower[c]);
return ;
}
int temp=t*2;
int mid=(a[t].x+a[t].y)/2;
if(a[t].yanchi) {//如果区间a[t].x--a[t].y被操作过就赋给子区间
a[temp].yanchi=a[t].yanchi;
a[temp].sum=a[t].sum;
a[temp+1].yanchi=a[t].yanchi;
a[temp+1].sum=a[t].sum;
a[t].yanchi=0;
}
if(x>mid)inset(temp+1,x,y,c);
else
if(y<=mid)inset(temp,x,y,c);
else {
inset(temp,x,mid,c);
inset(temp+1,mid+1,y,c);
}
a[t].sum=a[temp].sum|a[temp+1].sum;
return ;
}
int qury(int t,int x,int y) {
// printf("%d %d %d\n",a[t].yanchi,a[t].x,a[t].y);
if(a[t].x==x&&a[t].y==y) {
// printf("%d\n",a[t].sum);
return a[t].sum;
}
int temp=t*2;
int mid=(a[t].x+a[t].y)/2;
if(a[t].yanchi) {//如果区间a[t].x--a[t].y被操作过就赋给子区间
a[temp].yanchi=a[t].yanchi;
a[temp].sum=a[t].sum;
a[temp+1].yanchi=a[t].yanchi;
a[temp+1].sum=a[t].sum;
a[t].yanchi=0;
}
if(x>mid)
return qury(temp+1,x,y);
else if(y<=mid)
return qury(temp,x,y);
else
return qury(temp,x,mid)|qury(temp+1,mid+1,y);
a[t].sum=a[temp+1].sum|a[temp].sum;//更新
}
int main() {
int n,m,i,j,k,ans;
char s[10];
lower[0]=1;
for(i=1;i<=30;i++)
lower[i]=lower[i-1]*2;
while(scanf("%d%d",&n,&m),n||m) {
build(1,1,n);
while(m--) {
scanf("%s",s);
if(s[0]=='P') {
scanf("%d%d%d",&i,&j,&k);
inset(1,i,j,k-1);
}
if(s[0]=='Q') {
scanf("%d%d",&i,&j);
ans=qury(1,i,j);
// printf("%d\n",ans);
k=0;
for(i=0;i<30;i++)
if(ans&lower[i]) {
if(k)
printf(" ");
printf("%d",i+1);
k=1;
} printf("\n");
}
} }
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 ...
- zoj 1610 Count the Colors(线段树延迟更新)
所谓的懒操作模板题. 学好acm,英语很重要.做题的时候看不明白题目的意思,我还拉着队友一块儿帮忙分析题意.最后确定了是线段树延迟更新果题.我就欣欣然上手敲了出来. 然后是漫长的段错误.... 第一次 ...
- hdu 4267 线段树间隔更新
A Simple Problem with Integers Time Limit: 5000/1500 MS (Java/Others) Memory Limit: 32768/32768 K ...
- hdu 5023 线段树+状压
http://acm.hdu.edu.cn/showproblem.php?pid=5023 在片段上着色,有两种操作,如下: 第一种:P a b c 把 a 片段至 b 片段的颜色都变为 c . 第 ...
- HDU 1698 线段树 区间更新求和
一开始这条链子全都是1 #include<stdio.h> #include<string.h> #include<algorithm> #include<m ...
- hdu 1698 线段树 区间更新 区间求和
Just a Hook Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- hdu 1166线段树 单点更新 区间求和
敌兵布阵 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- HDU 5023线段树区间染色,统计区间内颜色个数
这个也是一个线段树的模板 #include<iostream> #include<string.h> #include<algorithm> #include< ...
- HDU 2795 线段树单点更新
Billboard Time Limit: 20000/8000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
随机推荐
- Extjs6 经典版 combo下拉框数据的使用及动态传参
Extjs的下拉框,在点击的时候会请求一次数据,我们可不可以在点击前就请求好数据,让用户体验更好呢?答案当然是肯定的.如果是公用的下拉框还可以传入不同参数请求不同数据. 第一步: 进入页面前首先加载s ...
- PowerDesigner 的使用教程
PowerDesigner 的使用这两篇博客挺好,我也是跟着学习,就不再写了: 初步学习: http://www.cnblogs.com/huangcong/archive/2010/06/14/17 ...
- 题解报告:hdu 1015 Safecracker
Problem Description === Op tech briefing, 2002/11/02 06:42 CST === "The item is locked in a Kl ...
- Windows Azure中文博客 Windows Azure入门教学系列 (一): 创建第一个WebRole程序
http://blogs.msdn.com/b/azchina/ 本文转自:http://blogs.msdn.com/b/azchina/archive/2010/02/09/windows-azu ...
- CDH搭建Hadoop分布式服务器集群(java新手小白)
1首先对于一个java还白的小白,先理解CDH与Hadoop的关系 一.Hadoop版本选择. Hadoop大致可分为Apache Hadoop和第三方发行第三方发行版Hadoop,考虑到Hadoop ...
- Java多线程——线程之间的同步
Java多线程——线程之间的同步 摘要:本文主要学习多线程之间是如何同步的,如何使用volatile关键字,如何使用synchronized修饰的同步代码块和同步方法解决线程安全问题. 部分内容来自以 ...
- Android集成微信分享功能应用签名生成方法及分享不生效的问题
通过友盟sdk集成微博.微信.qq等分享功能时,微博和qq很顺利,但在做微信集成时一直不成功.主要问题还是之前在微信开放平台申请创建移动应用时,对应用签名没有填写对,走了很多弯路现总结出来,加深记忆避 ...
- windows服务器监控多个tomcat运行状态
第一步,修改tomcat默认的进程名 因为所有的tomcat项目的进程名默认都叫java.exe,所以需要修改tomcat容器bin目录下的setclasspath.bat.注释掉:(在set前加上 ...
- 【转】非常好的Java反射例子
转自 http://www.douban.com/note/306848299/ 原文: 1.Java反射的概念 反射含义:可以获取正在运行的Java对象. 2.Java反射的功能 1)可以判断运行时 ...
- (转)淘淘商城系列——商品搜索功能Service实现
http://blog.csdn.net/column/details/15737.html 首先我们在taotao-search-interface工程中新建一个SearchService接口,并在 ...