成端更新+统计区间内的值

挺模板的题。。。

一开始没想起来用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 线段树的更多相关文章

  1. hdu 5023 线段树+状压

    http://acm.hdu.edu.cn/showproblem.php?pid=5023 在片段上着色,有两种操作,如下: 第一种:P a b c 把 a 片段至 b 片段的颜色都变为 c . 第 ...

  2. HDU 5023线段树区间染色,统计区间内颜色个数

    这个也是一个线段树的模板 #include<iostream> #include<string.h> #include<algorithm> #include< ...

  3. hdu 5023 线段树+位运算

    主要考线段树的区间修改和区间查询,这里有一个问题就是这么把一个区间的多种颜色上传给父亲甚至祖先节点,在这里题目告诉我们最多30颜色,那么我们可以把这30中颜色用二进制储存和传给祖先节点,二进制的每一位 ...

  4. hdu 5023 线段树延迟更新+状态压缩

    /* 线段树延迟更新+状态压缩 */ #include<stdio.h> #define N 1100000 struct node { int x,y,yanchi,sum; }a[N* ...

  5. 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 ...

  6. hdu 3974 线段树 将树弄到区间上

    Assign the task Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  7. hdu 3436 线段树 一顿操作

    Queue-jumpers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) To ...

  8. hdu 3397 线段树双标记

    Sequence operation Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  9. hdu 4578 线段树(标记处理)

    Transformation Time Limit: 15000/8000 MS (Java/Others)    Memory Limit: 65535/65536 K (Java/Others) ...

随机推荐

  1. Integer.valueof(null)报错

    原文  http://javacat360.iteye.com/blog/2024378 主题 Java 昨天,一同事问我一个问题,估计是他前段日子面试遇到的 问题很简单,String.valueof ...

  2. 前端见微知著JavaScript基础篇:你所不知道的apply, call 和 bind

    在我的职业生涯中,很早就已经开始使用JavaScript进行项目开发了.但是一直都是把重心放在了后端开发方面,前端方面鲜有涉及.所以造成的一个现象就是:目前的前端知识水平,应付一般的项目已然是足够的, ...

  3. Webwork 学习之路【02】前端OGNL试练

    1.OGNL 出现的意义 在mvc中,数据是在各个层次之间进行流转是一个不争的事实.而这种流转,也就会面临一些困境,这些困境,是由于数据在不同世界中的表现形式不同而造成的: a. 数据在页面上是一个扁 ...

  4. WPF ListView和ListBox等双击事件问题

    上两篇文章中说双击行获取不到当前数据对象问题, http://www.cnblogs.com/ligl/p/5636899.html http://www.cnblogs.com/ligl/p/562 ...

  5. .NET MVC HtmlHepler

    一.HtmlHepler 1.ActionLink() 动态生成 超链接:根据路由规则,生成对应的 html 代码. //1.注册路由信息 routes.MapRoute( name: "D ...

  6. jQuery学习笔记(四):attr()与prop()的区别

    这一节针对attr()与prop()之间的区别进行学习. 先看看官方文档是如何解释两者之间功能差异的: attr() Get the value of an attribute for the fir ...

  7. 基于FPGA的通信信号源的设计

    通信信号源设计原理 通过设计一个DDS信号源,然后将该信号作为载波信号,再对基带信号进行2ASK.2FSK.2PSK.2DPSK调制,进而产生多种通信信号. 设计框图如下: 将PN序列进行2ASK.2 ...

  8. Android开发之Fragment

    一.Fragment生命周期: 二.动态添加Fragment的三步: 1.获得Fragment的管理者FragmentManager FragmentManager fragmentManager = ...

  9. Hadoop配置安装手册

    本次Hadoop集群安装一共使用四个节点,各节点IP如下: Master 172.22.120.191 Slave1 172.22.120.192 Slave2 172.22.120.193 Slav ...

  10. PHPStorm2016如何安装主题

    今天放出如何安装phpstorm 主题教程,教程如下: 下载主题 地址:phpstoorm-themes.com 安装主题 PhpStorm and WebStorm themes can be in ...