제출 #1312183

#제출 시각아이디문제언어결과실행 시간메모리
1312183vtnooCat Exercise (JOI23_ho_t4)C++20
0 / 100
2095 ms560 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...