CF1066CBooks Queries(数组的特殊处理)
2024-10-19 06:29:53
题意描述
您需要维护一个数据结构,支持以下三种操作:
- L id:在现在序列的左边插一个编号为id的物品
- R id:在现在序列的右边插一个编号为id的物品
- ? id:查询该点左面有几个元素,右面有几个元素,并取min输出
输入输出格式:
输入格式:
第一行,一个整数q,表示操作数
下面q行,每行2个数,表示一个操作
输出格式
对于每个“?”操作,输出一行一个整数,表示答案
思路:
差点暴力上treap
水题一道
因为只有100000个数,所以我们可以维护一个大小为200000的数组以及lll,rrr两个指针
第一个数放在100000这个位置,每次往左放就l--,反之r++
把数填进去,同时写一个映射,将ididid映射为位置
当前位置−l-l−l为左面的数的数量,r−r-r−当前位置为右面的数的数量
然后输出即可
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define rii register int i
#define rij register int j
using namespace std;
int l,r,now,ys[];
int q;
int main()
{
scanf("%d\n",&q);
for(rii=;i<=q;i++)
{
char cz;
int id;
scanf("%c%d\n",&cz,&id);
if(i==)
{
ys[id]=;
l=;
r=;
continue;
}
if(cz=='L')
{
l--;
ys[id]=l;
}
if(cz=='R')
{
r++;
ys[id]=r;
}
if(cz=='?')
{
printf("%d\n",min(ys[id]-l,r-ys[id]));
}
}
}
最新文章
- JS学习之事件流
- 跨平台编程:关于VS和QT那些事
- OracleDBConsoleorcl是具体管什么的服务(转)
- Tomcat设置默认启动项目及Java Web工程设置默认启动页面
- 表单form的属性,单行文本框、密码框、单选多选按钮
- Quant面试准备5本书
- php文件读写锁
- OpenOffice的安装与启动2
- 重定位表 IMAGE_BASE_RELOCATION
- Windows 7/Vista 开机自动登录
- Python 2.7 学习笔记 字典(map)的使用
- 201521123098 《Java程序设计》第11周学习总结
- SpringMvc环境搭建(配置文件)
- 巧用Win+R
- Sharding-jdbc视频:当Sharding-jdbc遇到Spring Boot
- Python线程同步
- antd + node.js + mongoose小总结
- mysql连接时提示错误太多的解决
- jenkins构建配置
- 关闭文件描述符-close