제출 #1253042

#제출 시각아이디문제언어결과실행 시간메모리
1253042FernandoJC07장애물 (IOI25_obstacles)C++20
24 / 100
122 ms9408 KiB
#include <bits/stdc++.h> #define For(i, a, n) for(int i = a; i<n; ++i) #define vi vector<int> #define vii vector<vector<int>> using namespace std; const int INF = 1e9+7; vi res; void initialize(vi T, vi H){ int n = T.size(); int m = H.size(); vi mt(n); mt[0] = T[0]; For(i, 1, n) mt[i] = max(mt[i-1], T[i]); vi mint(n); mint[0] = T[0]; For(i, 1, n) mint[i] = min(mint[i-1], T[i]); int minx = INF; For(i, 0, m){ minx = min(minx, H[i]); int upper = upper_bound(mt.begin(), mt.end(), H[i]) - mt.begin(); --upper; if(upper==-1) continue; if(upper == n-1){ minx = INF; res.push_back(i); continue; } int l = 0, r = n-1; while(r>l){ int mid = l + (r-l)/2; if(mint[mid]<=minx) r = mid; else l = mid+1; } if(upper>=l) res.push_back(i); } } bool can_reach(int L, int R, int S, int D){ if(S>D) swap(S, D); auto i1 = lower_bound(res.begin(), res.end(), S); auto i2 = upper_bound(res.begin(), res.end(), D); return (i1 == i2); }
#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...