图书管理(模拟)

你有一个书架,然后你现在把书放上去。

你总共要操作 q 次,操作有三类:

L id,将编号为 id 的书放在书架现在最左边那本书的左边。
R id,将编号为 id 的书放在书架现在最右边那本书的右边。
? id,问你需要至少拿走几本书使得编号为 id 的书成为书架上最左边或者最右边那本书。
输入格式
输入的第一行包含一个整数 q(1≤ q ≤ 2 × 10^5)。

然后有 q 行,每一行为一个操作,格式见题面。数据保证至少有一个 ?? 操作。(1≤ id ≤ 2 × 10^5)

输出格式
对于每一个 ? 操作,输出它的答案,一个操作输出一行。

输出时每行末尾的多余空格,不影响答案正确性

样例输入1

8
L 1
R 2
R 3
? 2
L 4
? 1
L 5
? 1

样例输出1

1
1
2

样例输入2

10
L 100
R 100000
R 123
L 101
? 123
L 10
R 115
? 100
R 110
? 115

样例输出2 复制

0
2
1

解题思路:

#include <cstdio>
#include <algorithm>
#include <deque>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <iostream>
using namespace std;
int q,id;
char c;
int temp[2 * 100000 + 5];
int main() {
	scanf("%d", &q);
	getchar();
	int l = 100000;
	int r = 100001;
	while (q--) {
		scanf("%c %d", &c, &id);
		getchar();
		if (c == 'L'){
			temp[id] = l--;	
		}
		else if (c == 'R') {
			temp[id] = r++;
		}else {
			printf("%d\n", min(temp[id] - l - 1, r - temp[id] - 1));
		}
	}
	return 0;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值