Submission #1293812

#TimeUsernameProblemLanguageResultExecution timeMemory
1293812aren_danceObstacles for a Llama (IOI25_obstacles)C++17
0 / 100
52 ms7360 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],t[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]>h[i]){ l=mid+1; am[i]=pref_maxv[mid]; } else{ r=mid-1; } } } } int ind(int v){ int g=am[v]; for(int i=v+1;i<=m;++i){ if(mast[g]<=mash[i]){ break; } g=max(g,am[i]); } int e=am[v]; for(int i=v-1;i>0;--i){ if(mast[g]<=mash[i]){ break; } g=max(g,am[i]); } return max(g,e); } 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...