#include<bits/stdc++.h>
using namespace std;
int ar[250005];
int n,a;
struct segtree{
int mx[1000005];
void upd(int st,int en,int i,int pos,int val){
if(st>pos||en<pos)return;
if(st==en)return void(mx[i]=val);
int m=(st+en)/2;
upd(st,m,i*2,pos,val);
upd(m+1,en,i*2+1,pos,val);
mx[i]=max(mx[i*2],mx[i*2+1]);
}
int fr(int st,int en,int i,int l,int r,int val){
if(st>r||en<l||mx[i]<=val)return 0;
if(st==en)return st;
int m=(st+en)/2;
int temp=fr(st,m,i*2,l,r,val);
if(temp==0)return fr(m+1,en,i*2+1,l,r,val);
return temp;
}
int fl(int st,int en,int i,int l,int r,int val){
//cerr<<st<<" "<<en<<" "<<mx[i]<<" "<<"\n";
if(st>r||en<l||mx[i]<=val)return 0;
if(st==en)return st;
//cerr<<"pass\n";
int m=(st+en)/2;
int temp=fl(m+1,en,i*2+1,l,r,val);
if(temp==0)return fl(st,m,i*2,l,r,val);
else return temp;
}
int fmx(int st,int en,int i,int l,int r){
if(st>r||en<l)return 0;
if(st>=l&&en<=r)return mx[i];
int m=(st+en)/2;
return max(fmx(st,m,i*2,l,r),fmx(m+1,en,i*2+1,l,r));
}
void build(int st,int en,int i){
if(st==en)return void(mx[i]=ar[st]);
int m=(st+en)/2;
build(st,m,i*2);
build(m+1,en,i*2+1);
mx[i]=max(mx[i*2],mx[i*2+1]);
}
}tr;
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
cin>>n>>a;
vector<pair<int,int>>v;
for(int i=1;i<=n;i++)cin>>ar[i],v.push_back({ar[i],i});
sort(v.begin(),v.end());
vector<int>most;
for(int i=0;i<v.size();i++){
ar[v[i].second]=i+1;
}
for(int i=0;i<10;i++){
if(i>=v.size())break;
most.push_back(v[v.size()-i-1].second);
}
//for(auto x:most)cerr<<x<<" ";
//cerr<<"\n";
tr.build(1,n,1);
int cur=n;
int q;cin>>q;
for(int i=0;i<q;i++){
char x;cin>>x;
if(x=='E'){
int i,e;cin>>i>>e;
vector<int>temp;
int j=0;
for(;j<e-1;j++){
temp.push_back(most[j]);
}
temp.push_back(i);
while(temp.size()<(min(10,n))){
if(most[j]!=i)temp.push_back(most[j]);
j++;
}
most=temp;
//cerr<<"most: ";
//for(auto x:most)cerr<<x<<" ";
//cerr<<"\n";
for(int i=most.size()-1;i>=0;i--){
tr.upd(1,n,1,most[i],cur+most.size()-i);
}
cur+=most.size();
//for(int i=1;i<=n;i++)cerr<<tr.fmx(1,n,1,i,i)<<' ';
//cerr<<"\n";
}else{
int b;cin>>b;
if(b>a){
int temp=tr.fmx(1,n,1,a+1,b);
int id=0;
if(tr.fmx(1,n,1,1,a-1)<temp){
id=0;
}else{
id=tr.fl(1,n,1,1,a-1,temp);
}
//cerr<<"ql:"<<b<<" "<<temp<<" "<<id<<"\n";
cout<<b-id-1<<"\n";
}else if(b<a){
int temp=tr.fmx(1,n,1,b,a-1);
int id=0;
if(tr.fmx(1,n,1,a+1,n)<temp){
id=n+1;
}else{
id=tr.fr(1,n,1,a+1,n,temp);
}
//cerr<<"qr:"<<b<<" "<<temp<<" "<<id<<"\n";
cout<<id-b-1<<"\n";
}else{
cout<<"0\n";
}
}
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |