Submission #645745

#TimeUsernameProblemLanguageResultExecution timeMemory
645745Kriptonpopa (BOI18_popa)C++14
61 / 100
170 ms452 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; for(int i=0;i<n;i++) { maxst[i]=i-1; while(maxst[i]!=-1&&query(maxst[i],i,i,i)) maxst[i]=maxst[maxst[i]]; } for(int i=n-1;i>=0;i--) { maxdr[i]=i+1; while(maxdr[i]!=n&&query(i,maxdr[i],i,i)) maxdr[i]=maxdr[maxdr[i]]; } for(int i=0;i<n;i++) { maxst[i]++; maxdr[i]--; } 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...