博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 4960 Handling the past 2014 多校9 线段树
阅读量:5165 次
发布时间:2019-06-13

本文共 2180 字,大约阅读时间需要 7 分钟。

首先确定的基本思想是按时间离散化后来建线段树,对于每个操作插入到相应的时间点上

但是难就难在那个pop操作,我之前对pop操作的处理是找到离他最近的那个点删掉,但是这样对于后面的peak操作,如果时间戳还在pop前面,那就需要还原之前的pop操作,这弄得很不方便

于是就有了一种类似扫描线的做法,对于push操作+1,pop操作-1,对于每次peak操作,从他这点往左走,找到第一个>0的点即可

#include 
#include
#include
#include
#define LL __int64#define lson rt<<1,l,mid#define rson rt<<1|1,mid+1,rusing namespace std;const int N = 50010;int sum[N<<2],rsum[N<<2];int d[N<<2];int q[N],A[N],tmp[N],t[N];int n;void build(int rt,int l,int r){ sum[rt]=rsum[rt]=0; if (l>=r){ return; } int mid=(l+r)>>1; build(lson); build(rson);}void up(int rt){ sum[rt]=sum[rt<<1]+sum[rt<<1|1]; rsum[rt]=max(rsum[rt<<1|1],sum[rt<<1|1]+rsum[rt<<1]);}void update(int val,int pos,int loc,int rt,int l,int r){ if (l>=r){ sum[rt]=val; rsum[rt]=val; if (val>0) d[rt]=A[loc]; //if (val<0) rsum[rt]=0; return; } int mid=(l+r)>>1; if (pos<=mid) update(val,pos,loc,lson); else update(val,pos,loc,rson); up(rt);}int s;int query(int pos,int rt,int l,int r){ if (r<=pos){ if (s+rsum[rt]<=0){ s+=sum[rt]; return -1; } } if (l>=r){ return d[rt]; } int mid=(l+r)>>1; if (pos<=mid) return query(pos,lson); int res=-1; res=query(pos,rson); if (res!=-1) return res; return query(pos,lson);}int main(){ char str[10]; int kase=0; while (scanf("%d",&n)!=EOF) { if (n==0) break; for (int i=1;i<=n;i++){ scanf("%s",str); if (str[1]=='u'){ q[i]=1; scanf("%d%d",&A[i],&tmp[i]); } else if (str[1]=='o'){ q[i]=2; scanf("%d",&tmp[i]); } else{ q[i]=3; scanf("%d",&tmp[i]); } t[i]=tmp[i]; } printf("Case #%d:\n",++kase); sort(t+1,t+1+n); for (int i=1;i<=n;i++){ int pos=lower_bound(t+1,t+1+n,tmp[i])-t; tmp[i]=pos; //cout<
<

  

转载于:https://www.cnblogs.com/kkrisen/p/3963020.html

你可能感兴趣的文章
Ubuntu boot空间不足解决方法
查看>>
Linux基础命令---iostat显示设备状态
查看>>
java例程练习(多线程[join()方法])
查看>>
20155337 2016-2017-2 《Java程序设计》第三周学习总结
查看>>
覆盖equals时请遵守通用约定
查看>>
memcached的安装和使用
查看>>
inner join 各种连接 SQL语句
查看>>
经验人士的IOS APP设计心得
查看>>
teleport使用说明
查看>>
IdentityServer4 登录使用数据库
查看>>
从PDF中提取信息----PDFMiner
查看>>
极简Node教程-七天从小白变大神(一:你需要Express)
查看>>
Windows环境配置Apache+Mysql+PHP
查看>>
内网端口映射详解(花生壳)
查看>>
回调和回显有什么区别?
查看>>
业务逻辑与数据解耦+单元测试
查看>>
mysql数据备份
查看>>
Ural Timus 1009 K-based Numbers (dp+矩阵快速幂+快速乘)
查看>>
[经验总结] 从其它sheet页引用数据生成图表时没有图例的解决办法
查看>>
RabbitMQ(消息队列)私人学习笔记
查看>>