1066C - Books Queries
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<cstring>
#include<algorithm>
#include<stack>
#include<math.h>
#include<queue>
#include<map>
#include<time.h>
#include<vector>
#include <math.h>
#include <set>
#define ll long long
#define max(a,b) ((a)>(b)?(a):(b))
#define mem(a,b) memset(a,b,sizeof(a))
#define min(a,b) ((a)<(b)?(a):(b))
#define pb push_back
#define inf 0x3f3f3f3f
#define pii pair<ll,ll>
#define pi acos(-1)
#define mkp make_pair
#define en '\n'
#define maxn 2123456
#define rll register ll
#define mod 9901
using namespace std;
void rd(int &x) {
x=0;
int f=1;
char s;
while(s>'9'||s<'0') {
if(s=='-')f=-1;
s=getchar();
}
while(s>='0'&&s<='9') {
x=x*10+s-48;
s=getchar();
}
x*=f;
}
int r,l;
struct node {
int deep,kind;
} book[maxn];;
char s[10];
int n,x;
/// ***********************************************
int main() {
#ifdef local
freopen("input2.txt","r",stdin);
// ll tt = clock();
#endif // local
cin>>n;
for(int i=0; i<n; i++) {
scanf("%s",s);
rd(x);
if(s[0]=='?') {
int tkind=book[x].kind;
if(tkind==1) {
int tem=min(l-book[x].deep,r+book[x].deep-1);
cout<<tem<<en;
} else {
int tem=min(r-book[x].deep,l+book[x].deep-1);
cout<<tem<<en;
}
continue;
}
l+=s[0]=='L';
r+=s[0]=='R';
//cout<<l<<' '<<r<<en;
if(s[0]=='L') {
book[x].kind=1;
book[x].deep=l;
} else {
book[x].kind=0;
book[x].deep=r;
}
}
//#ifdef local
// cerr << "\nTIME = " << clock() - tt << endl;
// tt = clock();
//#endif
return 0;
}