제출 #1252150

#제출 시각아이디문제언어결과실행 시간메모리
1252150FernandoJC07장애물 (IOI25_obstacles)C++20
0 / 100
2097 ms6844 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; vi res; void initialize(vi T, vi H){ int n = T.size(); int m = H.size(); vi mh(m); mh[0] = H[0]; For(i, 1, m) mh[i] = min(mh[i-1], H[i]); vi lt(n); For(i, 0, n){ int l = -1, r = m-1; while(r>l){ int mid = l + (r-l)/2; if(mh[mid]>=T[i]) l = mid; else r = mid-1; } lt[i] = l; } vi maxlt(n); maxlt[0] = lt[0]; For(i, 1, n) maxlt[i] = max(maxlt[i-1], lt[i]); vi mt(n); mt[0] = T[0]; For(i, 1, n) mt[i] = max(mt[i-1], T[i]); For(i, 0, m){ int upper = upper_bound(mt.begin(), mt.end(), H[i]) - mt.begin(); --upper; if(upper==-1) continue; if(maxlt[upper]>=i || upper == n-1) 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...