Submission #960949

#TimeUsernameProblemLanguageResultExecution timeMemory
960949tudor_costinCat Exercise (JOI23_ho_t4)C++11
21 / 100
75 ms15444 KiB
#include <iostream> using namespace std; const int Nmax=2e5+5; int aint[4*Nmax]; int a[Nmax]; int pos[Nmax]; int n; int sol=0; void build(int nod,int l,int r) { if(l==r) { aint[nod]=a[l]; return; } int mid=(l+r)/2; build(2*nod,l,mid); build(2*nod+1,mid+1,r); aint[nod]=max(aint[2*nod],aint[2*nod+1]); return; } int query(int nod,int l,int r,int st,int dr) { if(st<=l && r<=dr) return aint[nod]; int mid=(l+r)/2; if(dr<=mid) return query(2*nod,l,mid,st,dr); if(mid<st) return query(2*nod+1,mid+1,r,st,dr); return max(query(2*nod,l,mid,st,mid),query(2*nod+1,mid+1,r,mid+1,dr)); } int solve(int l,int r,int poz) { int op1=0,op2=0; ///in stanga if(poz>l) { int newr=poz-1; int pozst=pos[query(1,1,n,l,newr)]; op1=poz-pozst; op1+=solve(l,newr,pozst); } ///in dreapta if(poz<r) { int newl=poz+1; int pozdr=pos[query(1,1,n,newl,r)]; op2=pozdr-poz; op2+=solve(newl,r,pozdr); } return max(op1,op2); } int main() { cin>>n; for(int i=1;i<=n;i++) { cin>>a[i]; pos[a[i]]=i; } build(1,1,n); int pozi=pos[query(1,1,n,1,n)]; cout<<solve(1,n,pozi)<<'\n'; 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...