思路
不一定要创建队列,操作?可以看作从左或从右弹出的最小数字数,而且题目规定并不是真的要弹出数字,所以只要确定他们在队列中的顺序(存下标)即可。
代码
#include <bits/stdc++.h>
using namespace std;
const int N=2e5+9; //注意数据范围
int a[N]; //下标数组
int main(){
int q,l=0,r=-1; //一开始队列为空,下标错开
cin>>q;
while(q--){
char c;
int n;
cin>>c>>n;
if(c=='L') a[n]=--l; //左插
else if(c=='R') a[n]=++r; //右插
else cout<<min(a[n]-l,r-a[n])<<endl; //与最左和最右端下标比较,取最小值
}
return 0;
}