Submission #645755

#TimeUsernameProblemLanguageResultExecution timeMemory
645755Kriptonpopa (BOI18_popa)C++14
61 / 100
117 ms420 KiB
#include <bits/stdc++.h> #include "popa.h" using namespace std; int st[1001],dr[1001]; int maxst[1001],maxdr[1001]; int solutioneaza(int sta,int dre) { if(sta==dre) return sta; for(int i=sta;i<=dre;i++) if(maxst[i]<=sta&&maxdr[i]>=dre) { if(i!=sta) st[i]=solutioneaza(sta,i-1); if(i!=dre) dr[i]=solutioneaza(i+1,dre); return i; } return -1; } int solve(int n,int *Left, int *Right) { for(int i=0;i<n;i++) { st[i]=dr[i]=-1; maxst[i]=i-1; } for(int i=0;i<n;i++) while(maxst[i]!=-1&&query(maxst[i],i,i,i)) maxst[i]=maxst[maxst[i]]; for(int i=0;i<n;i++) maxst[i]++; for(int i=n-1;i>=0;i--) { maxdr[i]=i; int j; for(j=i+1;j<n;j++) if(maxst[j]<maxst[i]) { maxdr[i]=j-1; break; } else if(maxst[j]==maxst[i]) { if(query(maxst[i],i,maxst[j],j)) maxdr[i]=maxdr[j]; else maxdr[i]=j-1; break; } if(j==n) maxdr[i]=n-1; } int x=solutioneaza(0,n-1); for(int i=0;i<n;i++) { Left[i]=st[i]; Right[i]=dr[i]; } return x; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...