This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
const int N = 250005;
static int tree[2 * N];
void update(int i, int x){
i += N;
while(i > 0){
tree[i] = max(tree[i],x);
i >>= 1;
}
}
int query(int l, int r){
int ans = -123;
for(l += N, r += N;l < r;l >>= 1, r >>= 1){
if(l&1){
ans = max(ans, tree[l]);
l++;
}
if(r&1){
r--;
ans = max(ans, tree[r]);
}
}
return ans;
}
int main(){
//freopen("i.txt","r",stdin);
ios_base::sync_with_stdio(false);
cin.tie(0);
int n, a;
cin >> n >> a;
int best[11];
fill(best,best+11,-1);
for(int i = 0;i < n;i++){
int x;
cin >> x;
update(i+1,x);
if(n - x < 11) best[n-x] = i+1;
}
update(0,102345678);
update(n+1,102345679);
int q;
cin >> q;
for(int qq = 0;qq < q;qq++){
char cc;
cin >> cc;
if(cc == 'F'){
int x;
cin >> x;
if(x == a){
cout << "0\n";
}
else if(x < a){
int bound = query(x,a);
int low = a;
int high = n+1;
while(true){
if(low == high - 1) break;
int s = (low + high) / 2;
if(query(a+1,s+1) > bound) high = s;
else low = s;
}
cout << high - x - 1 << "\n";
}
else{
int bound = query(a+1,x+1);
int low = 0;
int high = a;
while(true){
if(low == high - 1) break;
int s = (low + high) / 2;
if(query(s,a) > bound) low = s;
else high = s;
}
cout << x - low - 1 << "\n";
}
}
else{
int x, y;
cin >> x >> y;
int start = 10;
for(int i = 0;i < 10;i++){
if(best[i] == x){
start = i;
break;
}
}
for(int i = start;i >= y;i--){
best[i] = best[i-1];
}
best[y-1] = x;
for(int i = 0;i < y - 1;i++){
update(best[i], query(best[i],best[i]+1) + 1);
//cout << best[i] << " " << query(best[i],best[i]+1) + 1;
}
update(x, query(best[y],best[y]+1) + 1);
//cout << x << " " << best[u
}
}
return 0;
}
# | 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... |