Submission #916505

#TimeUsernameProblemLanguageResultExecution timeMemory
916505Darren0724Cat Exercise (JOI23_ho_t4)C++17
41 / 100
39 ms40896 KiB
#include<bits/stdc++.h> using namespace std; #define int long long #define all(x) x.begin(),x.end() #define abcorz ios_base::sync_with_stdio(false);cin.tie(0); const int N=200005; const int K=18; int n; vector<int> v(N); int cmp(int i,int j){ return (v[i]>v[j]?i:j); } struct sparse_table{ vector<vector<int>> mx; void init(){ mx.resize(K,vector<int>(N)); for(int i=0;i<n;i++){ mx[0][i]=i; } for(int i=1;i<K;i++){ for(int j=0;j+(1<<i)<=n;j++){ mx[i][j]=cmp(mx[i-1][j],mx[i-1][j+(1<<(i-1))]); } } } int ask(int l,int r){ int p=__lg(r-l); return cmp(mx[p][l],mx[p][r-(1<<p)]); } }sp; int dc(int l,int r,int rec){ if(r<=l){ return 0; } int p=sp.ask(l,r); if(rec==-1)rec=p; return abs(rec-p)+max(dc(l,p,p),dc(p+1,r,p)); } int32_t main(){ abcorz; cin>>n; for(int i=0;i<n;i++){ cin>>v[i]; } sp.init(); int ans=dc(0,n,-1); cout<<ans<<endl; return 0; }
#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...