你有一个书架,然后你现在把书放上去。
你总共要操作 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;
}