题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=4553

线段树功能:update:区间替换 query:询问满足条件的最左断点

分析:poj3667的加强版,这里需要在每个区间内设置女神区间和屌丝区间,每次询问女神的时候,先看屌丝区间有无空位,有就插到屌丝区间内,同时更新女神区间,否则插到女神区间内,但同时也要更新屌丝区间,因为只有女神可以占用屌丝的时间,屌丝不能占用女神的时间,每次更新屌丝区间的时候直接更新即可,清空的话就是对屌丝和女神的区间都清空。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define LL long long
#define M 1000000000
#define maxn 55555
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
using namespace std;
int lsum[maxn<<],rsum[maxn<<],sum[maxn<<];
int col[maxn<<];
void PushDown(int rt,int m)
{
if(col[rt]!=-)
{
col[rt<<]=col[rt<<|]=col[rt];
sum[rt<<]=lsum[rt<<]=rsum[rt<<]=col[rt]?:m-(m>>);
sum[rt<<|]=lsum[rt<<|]=rsum[rt<<|]=col[rt]?:m>>;
col[rt]=-;
}
}
void PushUp(int rt,int m)
{
lsum[rt]=lsum[rt<<];
rsum[rt]=rsum[rt<<|];
if(lsum[rt]==m-(m>>))lsum[rt]+=lsum[rt<<|];
if(rsum[rt]==m>>)rsum[rt]+=rsum[rt<<];
sum[rt]=max((lsum[rt<<|]+rsum[rt<<]),max(sum[rt<<],sum[rt<<|]));
}
void build(int l,int r,int rt)
{
col[rt]=-;
sum[rt]=lsum[rt]=rsum[rt]=r-l+;
if(l==r)return;
int m=(r+l)>>;
build(lson);
build(rson);
}
void update(int L,int R,int c,int l,int r,int rt)
{
if(L<=l&&r<=R)
{
sum[rt]=lsum[rt]=rsum[rt]=c?:r-l+;
col[rt]=c;
return;
}
PushDown(rt,r-l+);
int m=(r+l)>>;
if(L<=m)update(L,R,c,lson);
if(R>m)update(L,R,c,rson);
PushUp(rt,r-l+);
}
int query(int w,int l,int r,int rt)
{
if(l==r)return l;
PushDown(rt,r-l+);
int m=(r+l)>>;
if(sum[rt<<]>=w)return query(w,lson);
else if(rsum[rt<<]+lsum[rt<<|]>=w)return m-rsum[rt<<]+;
else return query(w,rson);
}
int main()
{
int n,m;
while(scanf("%d%d",&n,&m)>)
{
build(,n,);
while(m--)
{
int a,b,op;
scanf("%d",&op);
if(op==)
{
scanf("%d",&a);
if(sum[]<a)puts("");
else
{
int ans=query(a,,n,);
printf("%d\n",ans);
update(ans,ans+a-,,,n,);
}
}
else
{
scanf("%d%d",&a,&b);
update(a,a+b-,,,n,);
}
}
}
}

hdu4553(线段树)的更多相关文章

  1. hdu4553约会安排 线段树

    //DS QT  找一段最靠前的长度为QT的空间 //NS QT  找一段最靠前的长度为QT的空间.假设没找到能够将DS占领的空间当做空暇空间,找一段最靠前的空间 //STUDY!! L R  清空L ...

  2. hdu4553 约会安排 线段树

    寒假来了,又到了小明和女神们约会的季节. 小明虽为屌丝级码农,但非常活跃,女神们常常在小明网上的大段发言后热情回复“呵呵”,所以,小明的最爱就是和女神们约会.与此同时,也有很多基友找他开黑,由于数量实 ...

  3. 约会安排---hdu4553(线段树,麻烦的区间覆盖)

      题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4553 算是poj3667的加强版,建立两颗线段树,一个是DS区间,另一个是NS区间.那么根据题意, ...

  4. HDU-4553 约会安排(线段树维护连续区间)

    http://acm.hdu.edu.cn/showproblem.php?pid=4553 Problem Description 寒假来了,又到了小明和女神们约会的季节.  小明虽为屌丝级码农,但 ...

  5. bzoj3932--可持久化线段树

    题目大意: 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第 ...

  6. codevs 1082 线段树练习 3(区间维护)

    codevs 1082 线段树练习 3  时间限制: 3 s  空间限制: 128000 KB  题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作: 1:给区 ...

  7. codevs 1576 最长上升子序列的线段树优化

    题目:codevs 1576 最长严格上升子序列 链接:http://codevs.cn/problem/1576/ 优化的地方是 1到i-1 中最大的 f[j]值,并且A[j]<A[i] .根 ...

  8. codevs 1080 线段树点修改

    先来介绍一下线段树. 线段树是一个把线段,或者说一个区间储存在二叉树中.如图所示的就是一棵线段树,它维护一个区间的和. 蓝色数字的是线段树的节点在数组中的位置,它表示的区间已经在图上标出,它的值就是这 ...

  9. codevs 1082 线段树区间求和

    codevs 1082 线段树练习3 链接:http://codevs.cn/problem/1082/ sumv是维护求和的线段树,addv是标记这歌节点所在区间还需要加上的值. 我的线段树写法在运 ...

随机推荐

  1. 基于visual Studio2013解决C语言竞赛题之1062高与矮

       题目 解决代码及点评 /************************************************************************/ /* 62 ...

  2. Android反编译-逆天的反编译

    Jar包的反编译: Java的世界是透明的,当编译java程序的时候,是将java源文件转成.class文件,java虚拟机去执行这些字节码从而得到执行java程序的目的.那么从.class文件能不能 ...

  3. 简单的javascript抽奖程序

    <html>  <head>   <title>手机号码抽奖程序</title>   <script>    //声明一个数组装住号码,可根 ...

  4. 基于visual Studio2013解决面试题之0207单词翻转

     题目

  5. Android剪切板(ClipboardManager) 复制文本

    Android也有剪切板(ClipboardManager) 注意:导包的时候 API 11之前:  android.text.ClipboardManagerAPI 11之后:  android.c ...

  6. 采购订单me22n 或者me21n增强 (点击保存和回车)

    IF_EX_ME_PROCESS_PO_CUST DATA:l_header TYPE mepoheader, l_item TYPE mepoitem. DATA:lt_items TYPE pur ...

  7. Material Master

    02-03 03: 物料主的定义:相同的物料应该是同一个物料号. 在PP放面我们主要关心的是工厂 . 定义公司后在公司下面在定义工厂. spro配置的时候我们可以在.后勤.物料管理.物料.创建: 后勤 ...

  8. maven Nexus 搭建本地中央仓库。

    maven 网络中央仓库占用大量的网络资源,所以构建本地中央仓库. 过程如下: 下载地址: http://www.sonatype.org/nexus/archived 我用的是1.6的 [root@ ...

  9. NetBSD是个开源到源码的系统

    How to get NetBSD NetBSD is an Open Source operating system, and as such it is freely available for ...

  10. EXTJS4两个ComboBox的数据源联动,解决遇到第二个ComboBox第二次以后显示忙的状态问题

    定义如下[红色部分是后加上的,它是解决问题的关键]: var bu_store = Ext.create('Ext.data.Store', { fields: ['key', 'value'], r ...