hdu 4967 Handling the Past
view code//把时间离散化,维护一个线段(线段l到r的和用sum[l,r]表示),pop的时候就在对应的时间减一,push则相反
//那么每次peak的时候(假设在pk是时刻),找一个以pk为结尾的后缀和,这个后缀和为1且前端离pk最近。
//即sum[pu, pk]==1 且pu是最靠近pk的时间。
//理解:假设sum[l,pk]==0, 那么l到pk这段时间的push和pop次数相等,对peak无影响,可以直接忽视。pu时刻就
//可以理解为是最后一次push的时刻,该时刻push的数就是栈顶元素 #include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <queue>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
const int INF = 1<<30;
const int N = 50010;
int sum[N<<2], suf[N<<2],id[N<<2];
int cas=1, n, x[N]; struct store
{
char type;
int v, t;
store() {}
store(char _type, int _t, int _v)
{
type = _type;
v = _v;
t = _t;
}
}sto[N]; void Up(int rt)
{
sum[rt] = sum[rt<<1|1] + sum[rt<<1];
suf[rt] = max(suf[rt<<1|1], suf[rt<<1]+sum[rt<<1|1]);
} void update(int p, int c, int pos, int l, int r, int rt)
{
if(l==r)
{
sum[rt] += c;
suf[rt] += c;
id[rt] = pos;
return ;
}
int m = (l+r)>>1;
if(p<=m) update(p, c, pos, lson);
else update(p, c, pos, rson);
Up(rt);
} int query(int L, int R, int l, int r, int rt)
{
if(L<=l && R>=r) return sum[rt];
int m = (l+r)>>1, ans = 0;
if(L<=m) ans += query(L, R, lson);
if(R>m) ans += query(L, R, rson);
return ans;
} int peak(int L, int R, int t, int l, int r, int rt)
{
// printf("peak(L=%d, R=%d, t=%d, l=%d, r=%d)=%d\n", L, R, t, l, r, id[rt]);
int m = (l+r)>>1, ans=0;
if(L<=l && R>=r)
{
if(l==r) return id[rt];
if(suf[rt<<1|1]>t) return peak(m+1, R, t, rson);
else if(suf[rt<<1]>t-sum[rt<<1|1]) return peak(L, m, t-sum[rt<<1|1], lson);
return 0;
}
if(R<=m) return peak(L, R, t, lson);
if(L>m) return peak(L, R, t, rson);
ans = peak(m+1, R, t, rson);
// ans = peak(L, R, t, rson);这样递归下去就错了
if(ans) return ans;
return peak(L, m, t-query(m+1, R, 1, n, 1),lson);
// return peak(L, R, t-query(m+1, R, 1, n, 1),lson);这样递归下去就错了
} void show()
{
for(int i=1; i<=n; i++)
{
if(sto[i].type == 'u')
printf("push %d %d\n", sto[i].t, sto[i].v);
else if(sto[i].type == 'e') printf("peak %d\n", sto[i].t);
else printf(" pop %d\n", sto[i].t);
}
} int main()
{
// freopen("in.txt", "r", stdin);
while(scanf("%d", &n)>0 && n)
{
memset(sum, 0, sizeof(sum));
memset(suf, 0, sizeof(suf));
memset(id, 0, sizeof(id));
char str[10];
int v, tm;
for(int i=1; i<=n; i++)
{
scanf("%s", str);
if(str[1]=='u') scanf("%d%d", &v, &tm);
else scanf("%d", &tm);
sto[i] = store(str[1], tm, v);
x[i] = tm;
}
sort(x+1, x+n+1);
for(int i=1; i<=n; i++) sto[i].t = lower_bound(x+1, x+1+n, sto[i].t)-x;
// show();
printf("Case #%d:\n", cas++);
for(int i=1; i<=n; i++)
{
tm = sto[i].t;
if(sto[i].type == 'u') update(tm, 1, i, 1, n, 1);
else if(sto[i].type == 'o') update(tm, -1, 0, 1, n, 1);
else
{
int pos = sto[i].t-1;
if(pos>0 && query(1, pos, 1, n, 1)>0)
{
printf("%d\n", sto[peak(1, pos, 0, 1, n, 1)].v);
}
else puts("-1");
}
}
}
return 0;
}
hdu 4967 Handling the Past的更多相关文章
- HDU 4960 Handling the past 2014 多校9 线段树
首先确定的基本思想是按时间离散化后来建线段树,对于每个操作插入到相应的时间点上 但是难就难在那个pop操作,我之前对pop操作的处理是找到离他最近的那个点删掉,但是这样对于后面的peak操作,如果时间 ...
- hdu 4960 Another OCD Patient (最短路 解法
http://acm.hdu.edu.cn/showproblem.php?pid=4960 2014 Multi-University Training Contest 9 Another OCD ...
- HDOJ 2111. Saving HDU 贪心 结构体排序
Saving HDU Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- 【HDU 3037】Saving Beans Lucas定理模板
http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...
- hdu 4859 海岸线 Bestcoder Round 1
http://acm.hdu.edu.cn/showproblem.php?pid=4859 题目大意: 在一个矩形周围都是海,这个矩形中有陆地,深海和浅海.浅海是可以填成陆地的. 求最多有多少条方格 ...
- HDU 4569 Special equations(取模)
Special equations Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u S ...
- HDU 4006The kth great number(K大数 +小顶堆)
The kth great number Time Limit:1000MS Memory Limit:65768KB 64bit IO Format:%I64d & %I64 ...
- HDU 1796How many integers can you find(容斥原理)
How many integers can you find Time Limit:5000MS Memory Limit:32768KB 64bit IO Format:%I64d ...
- hdu 4481 Time travel(高斯求期望)(转)
(转)http://blog.csdn.net/u013081425/article/details/39240021 http://acm.hdu.edu.cn/showproblem.php?pi ...
随机推荐
- JavaScript对象(Object)
JavaScript的简单数据类型包括数字.字符串.布尔值.null值和undefined值,其他所有的值都是对象.数字.字符串.布尔值“貌似”对象,因为他们拥有方法,但是他们是不可变的. ...
- 12款高质量的响应式 HTML5/CSS3 网站模板
HTML5 已经成为众所周知的语言,大量的 HTML5 资源和工具正在建立,以帮助开发人员和设计人员.今天,我们展示12款免费的响应式 HTML5/CSS3 网站模板,帮助你创建醒目和视觉震撼的网站. ...
- Plyr – 简单,灵活的 HTML5 媒体播放器
Plyr 是一个简单的 HTML5 媒体播放器,包含自定义的控制选项和 WebVTT 字幕.它是只支持现代浏览器,轻量,方便和可定制的媒体播放器.还有的标题和屏幕阅读器的全面支持. 在线演示 ...
- js中如何获取纯正的undefined?
1.为什么要获取undefined? 因为undefined在javascript中不是保留字,可以被用户当做变量来赋值,这样如果我们后期需要用到undefined来检测一个变量的话,那么检测的值就不 ...
- 解决方案:带格式化文本控件( RichText)的模板如果在InfoPath的浏览器中加载可能出现 COM 组件的80040154错误
建议大家在微软的组件出现问题时,在GOOGLE上搜索解决方案,一般来说,总有结果: 带格式化文本控件( RichText)的模板如果在InfoPath的浏览器中加载,可能出现 COM 组件的80 ...
- Revit如何模型导入到InfraWorks中
Infraworks也就是以前的Autodesk Infrastructure Modeler(AIM)作为一款优秀的概念设计软件,能接收来自各种来源的数据,这篇介绍如何把revit中的建筑模型导入到 ...
- Udp通讯(零基础)
前面学习了Tcp通讯之后听老师同学们讲到Udp也可以通讯,实现还要跟简单,没有繁琐的连接,所以最近学习了一下,记录下来以便忘记,同时也发表出来与大家相互学习,下面是我自己写的一个聊天例子,实现了群聊私 ...
- 用(*.frm *.MYD *.MYI)文件恢复MySql数据库
保存下来以防以后遇到 今天还原mysql数据库时,看到那个data文件夹下好几个文件,还没有.sql文件,没有见过,总结下.Data文件夹里面包括:数据库名文件夹,文件夹里包括,*.frm,*.MYI ...
- 删除项目中的CocoaPods
项目中如果使用了CocoaPods,但需要彻底删除,怎么办? 1.进入项目根目录,删除与Pod相关的文件 2.打开项目 3.删除项目中的Pods文件夹 4.编译,会报错,解决方法如下 5.编译,还会报 ...
- iOS开发--Swift 基于AFNetworking 3.0的网络请求封装
Swift和OC基于AFNetworking的网络请求流程相同, 就是语法不同, 对于Swift语法不是很清楚的同学, 建议多看看API文档, 自己多多尝试. 写过OC的应该都明白每句话做什么的, 就 ...