题目描述

用last[x]表示对x进行的上一次操作的位置,vis[x]表示x是否在大楼内。

Splay维护'?'的位置。

若x要进楼:

1.若x已在楼内,则去找last[x]到i之间是否有'?',若有,则可以把这个'?'当做是上一个x出楼,反之则 出现错误。

2.若x不在楼内,标记x在楼内。

若x要出楼:

1.若x在楼内,标记x不在楼内。

2.若x不在楼内,相同的去找last[x]到i之间是否有'?'。

#include<complex>
#include<cstdio>
using namespace std;
const int N=5e5+;
int n,sz,rot,ans=-;
int key[N],fat[N],son[N][],siz[N],last[N];
bool vis[N];
int qread()
{
int x=;
char ch=getchar();
while(ch<'' || ch>'')
{
if(ch=='I')return ;
if(ch=='O')return ;
if(ch=='?')return ;
ch=getchar();
}
while(ch>='' && ch<=''){x=x*+ch-'';ch=getchar();}
return x;
}
void Update(int rt)
{
siz[rt]=siz[son[rt][]]+siz[son[rt][]]+;
}
void Rotate(int x,int &rt)
{
int a=fat[x],b=fat[a],l=son[a][]==x,r=l^;
if(a==rt)rt=x;
else son[b][son[b][]==a]=x;
fat[son[x][r]]=a;fat[a]=x;fat[x]=b;
son[a][l]=son[x][r];son[x][r]=a;
Update(a);Update(x);
}
inline void Splay(int x,int &rt)
{
while(x!=rt)
{
int a=fat[x],b=fat[a];
if(a!=rt)
if((son[a][]==x)^(son[b][]==a))
Rotate(x,rt);
else Rotate(a,rt);
Rotate(x,rt);
}
}
void Insert(int v,int k)
{
int fa=;
while(k && key[k]!=v)
fa=k,k=son[k][key[k]<v];
k=++sz;
key[k]=v;siz[k]=;fat[k]=fa;
if(fa)son[fa][key[fa]<v]=k;
Splay(k,rot);
}
void Find(int x,int k)
{
while(son[k][key[k]<x] && x!=key[k])
k=son[k][key[k]<x];
Splay(k,rot);
}
void Delete(int x)
{
Find(x,rot);
if(son[rot][] && son[rot][])
{
int tmp=rot,k=son[rot][];
rot=k;
while(son[k][])k=son[k][];
siz[k]+=siz[son[tmp][]];
fat[son[tmp][]]=k;son[k][]=son[tmp][];
Splay(k,rot);
}
else rot=son[rot][]+son[rot][];
fat[rot]=;
}
int GetNxt(int x)
{
Find(x,rot);
if(key[rot]>x)return rot;
int k=son[rot][];
while(son[k][])k=son[k][];
return k;
}
int main()
{
scanf("%d",&n);
int tmp,p,x;
for(int i=;i<=n;i++)
{
p=qread();
if(p==)
{
x=qread();
if(vis[x])
{
tmp=key[GetNxt(last[x])];
if(!tmp)
{
ans=i;
break;
}
else Delete(tmp);
}
vis[x]=;
last[x]=i;
}
if(p==)
{
x=qread();
if(!vis[x])
{
tmp=key[GetNxt(last[x])];
if(!tmp)
{
ans=i;
break;
}
else Delete(tmp);
}
vis[x]=;
last[x]=i;
}
if(p==)Insert(i,rot);
}
printf("%d\n",ans);
return ;
}

#6085. 「美团 CodeM 资格赛」优惠券的更多相关文章

  1. LOJ#6085. 「美团 CodeM 资格赛」优惠券(set)

    题意 题目链接 Sol 考虑不合法的情况只有两种: 进去了 再次进去 没进去 但是出来了 显然可以用未知记录抵消掉 直接开个set维护一下所有未知记录的位置 最优策略一定是最后一次操作位置的后继 同时 ...

  2. loj 6085.「美团 CodeM 资格赛」优惠券

    题目: 一个有门禁的大楼,初始时里面没有人. 现在有一些人在进出大楼,每个人都有一个唯一的编号.现在有他们进出大楼的记录,但是有些被污染了,只能知道这里有一条记录,具体并不能知道. 一个人只有进大楼, ...

  3. 「题解」「美团 CodeM 资格赛」跳格子

    目录 「题解」「美团 CodeM 资格赛」跳格子 题目描述 考场思路 思路分析及正解代码 「题解」「美团 CodeM 资格赛」跳格子 今天真的考自闭了... \(T1\) 花了 \(2h\) 都没有搞 ...

  4. 「美团 CodeM 资格赛」跳格子

    题目描述 nnn 个格子排成一列,一开始,你在第一个格子,目标为跳到第 n 个格子.在每个格子 i 里面你可以做出两个选择: 选择「a」:向前跳 ai​​ 步. 选择「b」:向前跳 bi 步. 把每步 ...

  5. 「美团 CodeM 资格赛」试题泛做

    LibreOJ真是吼啊! 数码 推个式子,把枚举因数转为枚举倍数.然后就发现它是根号分段的.然后每一段算一下就好了. #include <cstdio> #include <cstr ...

  6. loj 6084.「美团 CodeM 资格赛」跳格子

    题目: link 题解: 尽量走\(a\). 只要保证走\(a\)后到达的点一定可以到终点就可以走. 所以从终点开始\(dfs\)出所有能够到达终点的点. 然后再从起点开始\(dfs\)路径即可. 如 ...

  7. loj 6083.「美团 CodeM 资格赛」数码

    题目: 给定两个整数\(l\)和\(r\),对于任意\(x\),满足\(l\leq x\leq r\),把\(x\)所有约数写下来. 对于每个写下来的数,只保留最高位的那个数码.求\([1,9]\)中 ...

  8. LOJ #6192. 「美团 CodeM 复赛」城市网络 (树上倍增)

    #6192. 「美团 CodeM 复赛」城市网络 内存限制:64 MiB 时间限制:500 ms 标准输入输出   题目描述 有一个树状的城市网络(即 nnn 个城市由 n−1n-1n−1 条道路连接 ...

  9. LibreOJ #6192. 「美团 CodeM 复赛」城市网络

    #6192. 「美团 CodeM 复赛」城市网络 内存限制:64 MiB时间限制:500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: sqc 提交提交记录统计讨论测试数据   题目描 ...

随机推荐

  1. Linux进程自保护攻防对抗技术研究(Process Kill Technology && Process Protection Against In Linux)

    0. 引言 0x1: Linux系统攻防思想 在linux下进行"进程kill"和"进程保护"的总体思路有以下几个,我们围绕这几个核心思想展开进行研究 . 直接 ...

  2. mysql数据库备份之主从同步配置

    主从同步意义? 主从同步使得数据可以从一个数据库服务器复制到其他服务器上,在复制数据时,一个服务器充当主服务器(master),其余的服务器充当从服务器(slave).因为复制是异步进行的,所以从服务 ...

  3. jupyter安装出现问题:安装后无法打开

    jupyter安装出现问题:安装后无法打开 traitlets.traitlets.TraitError: Could not decode 'C:\Users\\xce\xa2\xcc\xf0\xd ...

  4. python 内建属性

    在python中创建一个类,它不仅有我们自定义的属性和方法,还有与生俱来的一些属性和方法,我们叫它内建属性. 下面是类常用内建属性列表. 常用专有属性 说明 触发方式 __init__ 构造初始化函数 ...

  5. 在SQL查询结果中添加自增列的两种方法

    解决办法<一>:如果想查询出这个表的信息,并添加一列连续自增的ID,可用如下查询语句: SELECT Row_Number() over ( order by getdate() ) as ...

  6. Kubernetes 1.15部署日记-使用kubeadm--<1-2-3-4>

    2019年9月17日 由于此次日记篇幅较长blog限制直接使用word发布所以分成几篇来发. 1.环境准备 10.110.149.172|192.168.111.51 K8s-1 Centos7.5 ...

  7. 快速搭建Kerberos服务端及入门使用

    快速搭建Kerberos服务端及入门使用 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Kerberos是一种网络身份验证协议.它旨在通过使用秘密密钥加密为客户端/服务器应用程序提 ...

  8. 微博MySQL优化之路

    数据库是所有架构中不可缺少的一环,一旦数据库出现性能问题,那对整个系统都回来带灾难性的后果.并且数据库一旦出现问题,由于数据库天生有状态(分主从)带数据(一般还不小),所以出问题之后的恢复时间一般不太 ...

  9. 【转】spring bean 卸载

    spring bean 卸载起因: 群里的一个朋友问到: 关于配置destory-method, springboot中 yml如何指定 首先介绍 bean卸载的三种形式 自定义destory-met ...

  10. BZOJ3277 串 和 BZOJ3473 字符串

    字符串 给定n个字符串,询问每个字符串有多少子串(不包括空串)是所有n个字符串中至少k个字符串的子串? 分析 参照自为风月马前卒和Candy?的题解. 广义后缀自动机不就是把很多串的SAM建到了一个S ...