Submission #1293843

#TimeUsernameProblemLanguageResultExecution timeMemory
1293843aren_danceObstacles for a Llama (IOI25_obstacles)C++17
0 / 100
2094 ms7364 KiB
#include <bits/stdc++.h> using namespace std; const int N=3e5+1; int mast[N]; int mash[N]; int n,m; int pref_maxv[N]; int pref_min[N]; int am[N]; void initialize(vector<int> t, vector<int> h) { int n=t.size(); int m=h.size(); pref_min[0]=1e9; for(int i=1;i<=n;++i){ mast[i]=t[i-1]; if(mast[pref_maxv[i]]<mast[i]){ pref_maxv[i]=i; } pref_min[i]=min(pref_min[i-1],mast[i]); } for(int i=1;i<=m;++i){ mash[i]=h[i-1]; int l=1; int r=n; while(l<=r){ int mid=(l+r)/2; if(pref_min[mid]>mash[i]){ l=mid+1; am[i]=pref_maxv[mid]; } else{ r=mid-1; } } } } int ind(int v){ int g=am[v]; while(true){ int e=g; for(int i=v+1;i<=m;++i){ if(mast[g]<=mash[i]){ break; } g=max(g,am[i]); } for(int i=v-1;i>0;--i){ if(mast[g]<=mash[i]){ break; } g=max(g,am[i]); } if(e==g){ break; } } return g; } bool can_reach(int l, int r, int s, int d) { s++; d++; int u=ind(s); int g=ind(d); int x=min(u,g); for(int i=min(s,d);i<=max(s,d);++i){ if(mast[x]<=mash[i]){ return 0; } } return 1; }
#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...