hdu 5023 线段树
成端更新+统计区间内的值
挺模板的题。。。
一开始没想起来用set统计,傻傻地去排序了【大雾
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<set>
using namespace std;
struct
{
int l,r;
int dat;
}t[];
char ch;
int N,M,num,aa,bb,cc;
set<int> s; //建树:
void build(int l,int r,int o)
{
if (o>num) num=o;
t[o].l=l; t[o].r=r; t[o].dat=;
if (l!=r)
{
int mid=(l+r)/;
build(l,mid,*o);
build(mid+,r,*o+);
}
} //push_down:(向下更新一层)
void push_down(int o)
{
if (t[o].dat!=)
{
t[o<<].dat=t[o].dat;
t[o<<|].dat=t[o].dat;
t[o].dat=;
}
} //更新:cin>>ml>>mr>>md; update(ml,mr,1,md); ->令a[ml..mr]=md
void update(int l,int r,int o,int md)
{
if (o>num) return;
int tl=t[o].l,tr=t[o].r;
if ((tl==l)&&(tr==r))
{
t[o].dat=md;
return;
}
if(t[o].dat==md) return;
int mid=(tl+tr)>>;
//if (tl==tr) return;
push_down(o);
if (r<=mid)
update(l,r,o<<,md);
else if (l>mid)
update(l,r,o<<|,md);
else
{
update(l,mid,o<<,md);
update(mid+,r,o<<|,md);
}
} void sum(int l,int r,int o)
{
if(o>num) return;
int tl=t[o].l,tr=t[o].r;
//if((l==tl)&&(r==tr))
if(t[o].dat) //经过的地方若t[o].dat不为0就加入set,而不是对每个tl==tr的节点统计。lazy思想的精髓
{
s.insert(t[o].dat);
return;
}
else
{
int mid=(tl+tr)/;
if(r<=mid)
sum(l,r,*o);
else if (l>mid)
sum(l,r,*o+);
else
{
sum(l,mid,*o);
sum(mid+,r,*o+);
}
}
} int main()
{
while(cin>>N>>M)
{
if((N==)&&(M==))
break;
build(,N,);
for(int i=;i<=M*;i++)
{
scanf("%c ",&ch);
//cout<<"iiiiiiii"<<i<<" "<<M<<endl;
if(ch=='P')
{
scanf("%d%d%d",&aa,&bb,&cc);
update(aa,bb,,cc);
}
else if (ch=='Q')
{
s.clear();
scanf("%d%d",&aa,&bb);
sum(aa,bb,);
//printf("SS: %lu\n", s.size());
int tmp=s.size();
for(set<int>::iterator it=s.begin();it!=s.end();it++)
{
printf("%d",*it);
tmp--;
if(tmp!=) printf(" ");
}
printf("\n");
}
}
}
return ;
}
Ref:http://blog.csdn.net/lyhvoyage/article/details/39518963
hdu 5023 线段树的更多相关文章
- hdu 5023 线段树+状压
http://acm.hdu.edu.cn/showproblem.php?pid=5023 在片段上着色,有两种操作,如下: 第一种:P a b c 把 a 片段至 b 片段的颜色都变为 c . 第 ...
- HDU 5023线段树区间染色,统计区间内颜色个数
这个也是一个线段树的模板 #include<iostream> #include<string.h> #include<algorithm> #include< ...
- hdu 5023 线段树+位运算
主要考线段树的区间修改和区间查询,这里有一个问题就是这么把一个区间的多种颜色上传给父亲甚至祖先节点,在这里题目告诉我们最多30颜色,那么我们可以把这30中颜色用二进制储存和传给祖先节点,二进制的每一位 ...
- hdu 5023 线段树延迟更新+状态压缩
/* 线段树延迟更新+状态压缩 */ #include<stdio.h> #define N 1100000 struct node { int x,y,yanchi,sum; }a[N* ...
- hdu 5877 线段树(2016 ACM/ICPC Asia Regional Dalian Online)
Weak Pair Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total ...
- hdu 3974 线段树 将树弄到区间上
Assign the task Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- hdu 3436 线段树 一顿操作
Queue-jumpers Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) To ...
- hdu 3397 线段树双标记
Sequence operation Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- hdu 4578 线段树(标记处理)
Transformation Time Limit: 15000/8000 MS (Java/Others) Memory Limit: 65535/65536 K (Java/Others) ...
随机推荐
- [转]WampServer localhost 图标不显示解决办法
FROM : http://blog.warmcolor.net/2011/11/03/wampserver-localhost-%E5%9B%BE%E6%A0%87%E4%B8%8D%E6%98%B ...
- HP “云图”GPU虚拟化工作站解决方案
HP PCS ”云图”GPU虚拟化工作站解决方案 ——将图形计算从桌面移到数据中心 惠普云图形GPU虚拟化桌面系统是以用户为中心的私有云服务.除了保留了传统桌面虚拟化方案以集中设备为中心统一管理等优点 ...
- 学习C++.Primer.Plus 4 复合类型
本章介绍的有复合类型有: 数组. 字符串. 结构. 共用体. 指针 数组: 声明数组时数组长度必须为常量(或const). 只有初始化时可以用“=”,其它时候均不可以给数组直接赋值,除了赋值的元素以外 ...
- Atom插件安装
Atom插件安装 Atom狂拽炫酷插件之activate-power-mode 引语: 在前文中提到了关于插件的安装,似乎简单易操作,不过最后我发现是我自己想简单了. activate-power-m ...
- java动态代理浅析
最近在公司看到了mybatis与spring整合中MapperScannerConfigurer的使用,该类通过反向代理自动生成基于接口的动态代理类. 于是想起了java的动态代理,然后就有了这篇文章 ...
- STM32-外部中断,没有硬件干扰就是快乐
一:触发方式 STM32 的外部中断是通过边沿来触发的,不支持电平触发: 二:外部中断分组 STM32 的每一个GPIO都能配置成一个外部中断触发源,STM32 通过根据引脚的序号不同将众多中断触发源 ...
- centos7 安装nginx和php5.6.25遇到 无法访问php页面 报错file not found 问题解决
php-fpm安装完成,nginx安装完成 netstap -ntl| 发下端口正常开启 iptables -L 返现9000端口已经开放 ps -aux|grep nginx 发下nginx进程正常 ...
- Realm Java的学习、应用、总结
从React Native珠三角沙龙会议了解到Realm这个开源库,然后开始学习.理解和使用Realm.Realm是跨平台.支持多种主流语言,这里主要是对Realm Java结合实际项目的一些情况进行 ...
- dnsunlocker解决
环境:windows 10 中文企业版,firefox47, chrome51 安装了某个国外程序后,浏览器各种不正常,打开网页慢,或是无法打开,更严重的是会弹广告,各种广告. 然后在控制面板中卸载了 ...
- Shell配置_配置IP
1.setup 打开图形化页面 a) 选择网络配置 b) 选择设置配置 c) 选择第一个网卡 2.启动网卡(第一个网卡) vim /etc/sysconfig/network-s ...