Description

在如今的网络中,TCP是一种被广泛使用的网络协议,它在传输层提供了可靠的通信服务。众所周知,网络是存在
时延的,例如用户先后向服务器发送了两个指令op1和op2,并且希望服务器先处理指令op1,再处理指令op2;但由
于网络时延,这两个指令可能会失序到达,而导致服务器先执行了指令op2,这是我们不希望看到的。TCP协议拥有
将失序到达的报文按顺序重组的功能,一种方法是给每一个报文打上一个时间戳。而你今天要实现的功能比这个要
简单很多。我们需要你维护一个服务器,这个服务器的功能是一个简单的栈,你会接收三种用户的指令:
push x t --- 表示将x元素入栈,这条指令的时间戳为t
pop t --- 表示将栈顶元素弹出,这条指令的时间戳为t
peak t --- 用户询问现在栈顶元素的值,这条指令的时间戳为t
当一条时间戳为t的指令到达时,你需要进行如下处理:
1.将所有之前执行的时间戳大于t的push和pop指令全部撤销
2.执行当前这条指令
3.按时间戳顺序重新执行在第1步被撤销的指令
注意你不需要撤销以及重新执行之前已经执行过的peak指令
也就是说每一条peak指令只有在它到达的时候会被执行一次。
我们保证每一条指令的时间戳都是唯一的;
若你在需要执行一条pop指令时发现当前栈为空,则当前你可以忽略这条指令。

Input

第一行包含一个整数n,表示指令总数。
接下来n行按指令到达服务器的顺序给出每一条指令,有三种类型
push x t
pop t
peak t
1 <= n <= 300000,0 <= x,t <= 1000000000

Output

对于每一条peak指令,输出对应的答案占一行;若栈为空,输出-1。
用线段树维护操作对应的括号序列的前缀和(push=1,pop=-1,peak=0,未执行=0),查询相当于查询一个位置向左第一个小于指定值的位置。
#include<bits/stdc++.h>
const int N=;
char buf[N*],*ptr=buf;
int _(){
int x=;
while(*ptr<)++ptr;
while(*ptr>)x=x*+*ptr++-;
return x;
}
int n,ts[N],qs[N][],tp=,vs[N];
int _x,_a,_p;
int min(int a,int b){return a<b?a:b;}
struct node{
node*lc,*rc;
int L,R,M;
int mn,a;
void add(int x){
mn+=x,a+=x;
}
void dn(){
if(a){
lc->add(a);
rc->add(a);
a=;
}
}
void up(){
mn=min(lc->mn,rc->mn);
}
void add(){
if(_x<=L)return add(_a);
dn();
if(_x<=M)lc->add();
rc->add();
up();
}
int at(){
if(L==R)return mn;
dn();
return (_x<=M?lc:rc)->at();
}
bool find(){
if(mn>=_a)return ;
if(L==R)return _p=R+,;
dn();
if(_x>M&&rc->find())return ;
return lc->find();
}
}ns[N*],*np=ns,*rt;
node*build(int L,int R){
node*w=np++;
w->L=L,w->R=R;
if(L<R){
int M=w->M=L+R>>;
w->lc=build(L,M);
w->rc=build(M+,R);
}
return w;
}
int $(int x){
return std::lower_bound(ts,ts+tp,x)-ts;
}
int main(){
fread(buf,,sizeof(buf),stdin);
n=_();
ts[tp++]=-;
for(int i=;i<=n;++i){
qs[i][]=_();
qs[i][]=_();
if(qs[i][]==)ts[tp++]=qs[i][]=_();
else ts[tp++]=qs[i][];
}
std::sort(ts,ts+tp);
rt=build(,tp-);
vs[]=-;
for(int i=;i<=n;++i){
if(qs[i][]==){
_x=$(qs[i][]);
vs[_x]=qs[i][];
_a=,rt->add();
}else if(qs[i][]==){
_x=$(qs[i][]);
_a=-,rt->add();
}else{
_x=$(qs[i][]);
_a=rt->at();
_p=;
rt->find();
printf("%d\n",vs[_p]);
}
}
return ;
}

bzoj5007: TCP协议的更多相关文章

  1. TCP协议学习

    一.TCP参考模型  VS OSI参考模型 二.TCP/IP分层模型的四个协议层分别完成以下的功能 第一层 网络接口层 网络接口层包括用于协作IP数据在已有网络介质上传输的协议.实际上TCP/IP标准 ...

  2. 【转】TCP协议

    TCP是什么? TCP(Transmission Control Protocol 传输控制协议)是一种面向连接(连接导向)的.可靠的. 基于IP的传输层协议.TCP在IP报文的协议号是6.TCP是一 ...

  3. 闲来无事,写个基于TCP协议的Socket通讯Demo

    .Net Socket通讯可以使用Socket类,也可以使用 TcpClient. TcpListener 和 UdpClient类.我这里使用的是Socket类,Tcp协议. 程序很简单,一个命令行 ...

  4. 简单测试nginx1.90做TCP协议负载均衡的功能

    最近工作中需要做TCP层面的负载均衡,以前网站用的反向代理nginx只支持应用层的负载均衡,对于TCP协议是无能为力的,需要使用LVS(linux虚拟服务器). LVS的特点是高性能和极复杂的配置.对 ...

  5. TCP协议

    TCP是一个面向连接的协议,在发送数据之前,必须在双方之间建立一条连接. TCP首部 TCP数据封装在IP数据报中 TCP包首部 下面简单说明部分字段的作用: 端口号:通讯双方由IP地址和端口号标识. ...

  6. TCP协议的三次握手和四次挥手

    暂时需要的信息有: ACK : TCP协议规定,只有ACK=1时有效,也规定连接建立后所有发送的报文的ACK必须为1 SYN(SYNchronization) : 在连接建立时用来同步序号.当SYN= ...

  7. TCP协议三次握手和四次挥手

    http://www.cnblogs.com/rootq/articles/1377355.html TCP(Transmission Control Protocol) 传输控制协议 TCP是主机对 ...

  8. ZeroMQ接口函数之 :zmq_tcp – 使用TCP协议的ØMQ网络单播协议

    ZeroMQ 官方地址 :http://api.zeromq.org/4-1:zmq-tcp zmq_tcp(7)          ØMQ Manual - ØMQ/4.1.0 Name zmq_t ...

  9. C#网络编程之---TCP协议的同步通信(二)

    上一篇学习日记C#网络编程之--TCP协议(一)中以服务端接受客户端的请求连接结尾既然服务端已经与客户端建立了连接,那么沟通通道已经打通,载满数据的小火车就可以彼此传送和接收了.现在让我们来看看数据的 ...

随机推荐

  1. P1220 关路灯 (区间dp)

    题目链接:传送门 题目大意: 总共有N盏灯,老张从点C(1 ≤ C ≤ N)开始关灯(关灯不需要等待时间,C点的灯直接关掉),与此同时灯开始烧电(已知功率Pi). 老张每次可以往左走关最近的灯或者往右 ...

  2. 20155208徐子涵 2016-2017-2 《Java程序设计》第2周学习总结

    20155208徐子涵 2016-2017-2 <Java程序设计>第2周学习总结 教材学习内容总结 第三章 基础语法 3.1 类型.变量与运算符 • 关键字:在定义java文件名的时候要 ...

  3. (8)视图层参数request详解

    PS:浏览器页面请求的都是get请求 PS:post请求是通过form表单,阿贾克斯发 request里面的常用方法 def index(request): print(request.META) # ...

  4. 【HDOJ3567】【预处理bfs+映射+康拓展开hash】

    http://acm.hdu.edu.cn/showproblem.php?pid=3567 Eight II Time Limit: 4000/2000 MS (Java/Others)    Me ...

  5. LVS简介及使用

    一.LVS是什么? LVS的英文全称是Linux Virtual Server,即Linux虚拟服务器.它是我们国家的章文嵩博士的一个开源项目.在linux内存2.6中,它已经成为内核的一部分,在此之 ...

  6. SCS Characteristics

    Each SCS is an autonomous web application. For the SCS's domain, all data, the logic to process that ...

  7. lapis 项目添加prometheus 监控集成grafana

    操作很简单,主要是进行界面的配置以及prometheus 服务的配置, 可以和https://www.cnblogs.com/rongfengliang/p/10074044.html &&a ...

  8. APACHE如何里一个站点绑定多个域名?用ServerAlias servername

    APACHE2如何里一个站点绑定多个域名?用ServerAlias以前很笨,要使多个域名指向同一站点总是这样写: <VirtualHost *:80>ServerAdmin i@kuigg ...

  9. Quartz.NET-2.3.3 各种 数据库配置 类别大全

    <!--SqlServer <add key="quartz.dataSource.myDS.connectionString" value="Data So ...

  10. Zabbix-2.4-安装-3

      zabbix自动注册简单介绍---创建自动注册的actions   怎么把1000台机器加zabbix里 zabbix提供了网络发现和自动注册2个功能,发现有机器连过来,给它加个模板 如果是win ...