博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
233
阅读量:4943 次
发布时间:2019-06-11

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

#include<cstdio>
#include<algorithm>
#define N 200010
#define which(u) (ls[f[(u)]]==(u))
using
namespace
std;
int
n,m,a,f[N],ls[N],rs[N],val[N],d,tot,root,sze[N],ans;
char
s[10];
int
read()
{
    
int
ans=0,fu=1;
    
char
j=
getchar
();
    
for
(;j<
'0'
|| j>
'9'
;j=
getchar
())
if
(j==
'-'
) fu=-1;
    
for
(;j>=
'0'
&& j<=
'9'
;j=
getchar
()) ans*=10,ans+=j-
'0'
;
    
return
ans*fu;
}
void
updt(
int
x)
{
    
sze[x]=sze[ls[x]]+sze[rs[x]]+1;
}
void
Rotate(
int
u)
{
    
int
v = f[u], w = f[v], b = which(u) ? rs[u] : ls[u];
    
if
(w) which(v) ? ls[w] = u : rs[w] = u;
    
which(u) ? (ls[v] = b, rs[u] = v) : (rs[v] = b, ls[u] = v);
    
f[u] = w, f[v] = u;
    
if
(b) f[b] = v;
    
updt(v), updt(u);
}
void
Splay(
int
u,
int
tar)
{
    
while
(f[u]!=tar)
    
{
    
if
(f[f[u]]!=tar)
    
{
        
if
(which(u)==which(f[u])) Rotate(f[u]);
        
else
Rotate(u);
    
}
    
Rotate(u);
    
}
    
if
(!tar) root=u;
}
void
insert(
int
x)
{
    
int
u=root,v=0;
    
while
(u)
    
{
    
v=u;
    
if
(x<=val[u]) u=ls[u];
    
else
u=rs[u];
    
}
    
f[++tot]=v,val[tot]=x,sze[tot]=1;
    
if
(v) x<=val[v]?ls[v]=tot:rs[v]=tot;
    
Splay(tot, 0);
}
int
query(
int
x)
{
    
int
u=root;
    
while
(x && (x-1)!=sze[rs[u]])
    
{
    
if
(sze[rs[u]]>=x) u=rs[u];
    
else
x-=(sze[rs[u]]+1),u=ls[u];
    
}
    
return
val[u];
}
int
getmn(
int
x)
{
    
while
(ls[x]) x=ls[x];
    
return
x;
}
int
main()
{
    
n=read();
    
m=read();
    
for
(
int
i=1;i<=n;i++)
    
{
    
scanf
(
"%s"
,s);
    
a=read();
    
if
(s[0]==
'I'
)
        
if
(a>=m) insert(a-d);
    
if
(s[0]==
'S'
)
    
{
        
d-=a;
        
insert(m-d);
        
ans+=sze[ls[tot]];
        
f[root=rs[root]]=0;
    
}
    
if
(s[0]==
'A'
) d+=a;
    
if
(s[0]==
'F'
)
    
{
        
if
(sze[root]<a)
printf
(
"-1\n"
);
        
else
printf
(
"%d\n"
,query(a)+d);
    
}
    
//printf("%d %d\n",val[root],sze[root]);
    
}
    
printf
(
"%d"
,ans);
    
return
0;
}

转载于:https://www.cnblogs.com/mrsheep/p/8157130.html

你可能感兴趣的文章
C语言之break和continue
查看>>
jquery.form.js使用
查看>>
LINQ to Entities 不支持 LINQ 表达式节点类型“ArrayIndex”。
查看>>
回顾2012,展望2013
查看>>
Spring中的ApplicationContextAware使用
查看>>
HDU-2067-小兔的棋盘
查看>>
监听手机录音
查看>>
hadoop的WordCount样例
查看>>
客户化程序完成标准成本成批更新
查看>>
JZOJ 1286. 太空电梯
查看>>
大数据平台组件布置 与 进程查看
查看>>
Hadoop3集群搭建之——hive添加自定义函数UDTF (一行输入,多行输出)
查看>>
【转】去除inline-block元素的间隙
查看>>
JS - Math对象
查看>>
MUI开发指南(二) webview对象
查看>>
HTML5按键打开摄像头和拍照
查看>>
解决RabbitMQ远程不能访问的问题
查看>>
接口的意义(转)
查看>>
向ASP.NET自定义控件中嵌入CSS资源
查看>>
SpringMVC DeferedResult和servlet3.1 AsyncContext异步请求
查看>>