#include <bits/stdc++.h>
#define L(i, j, k) for(int i = (j); i <= (k); i++)
#define R(i, j, k) for(int i = (j); i >= (k); i--)
#define ll long long
#define sz(a) ((int) a.size())
#define all(a) a.begin(), a.end()
#define vi vector<ll>
#define pb emplace_back
#define me(a, x) memset(a, x, sizeof(a))
#define fst first
#define snd second
#define ii pair<int, int>
using namespace std;
const int MAXN=2e5+5,INF=1e9;
int n;
vector<ii>st;
ii que(int l,int r){
l+=n,r+=n;
ii a={0,0};
while(l<r){
if(l%2)a=max(a,st[l++]);
if(r%2)a=max(a,st[--r]);
l/=2,r/=2;
}
return a;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin>>n;
vi p(n);
L(i,0,n-1)cin>>p[i];
L(i,0,n-2){
int a,b;cin>>a>>b;
}
st.resize(n*2);
L(i,0,n-1)st[i+n]={p[i],i};
R(i,n-1,1)st[i]=max(st[i*2],st[i*2+1]);
int l=0,r=n-1;
int ans=0;
while(r-l>2){
int m=que(l,r).snd;
ii lc=que(l,m),rc=que(m+1,r+1);
if(m-lc.snd>rc.snd-m){
ans+=m-lc.snd;
r=m;
}else{
ans+=rc.snd-m;
l=m;
}
//~ cout<<l<<" "<<r<<endl;
//~ cout<<ans<<endl;
}
cout<<ans+1<<endl;
}
| # | 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... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |