제출 #1254014

#제출 시각아이디문제언어결과실행 시간메모리
1254014jwvg0425장애물 (IOI25_obstacles)C++20
0 / 100
2095 ms5808 KiB
#include "obstacles.h" #include <stdio.h> #include <vector> #include <queue> #include <algorithm> #include <iostream> #include <string> #include <bitset> #include <map> #include <set> #include <tuple> #include <string.h> #include <math.h> #include <random> #include <functional> #include <assert.h> #include <math.h> #define all(x) (x).begin(), (x).end() #define xx first #define yy second using namespace std; template<typename T, typename Pr = less<T>> using pq = priority_queue<T, vector<T>, Pr>; using i64 = long long int; using ii = pair<int, int>; using ii64 = pair<i64, i64>; vector<int> t, h; void initialize(vector<int> T, vector<int> H) { t = T; h = H; } void expand(int& l, int& r, int& minh, int v) { while (l > 0 && h[l - 1] < v) { l--; minh = min(minh, h[l]); } while (r + 1 < h.size() && h[r + 1] < v) { r++; minh = max(minh, h[r]); } } bool can_reach(int l, int r, int s, int d) { int sl = s, sr = s; int mins = h[s]; int dl = d, dr = d; int mind = h[d]; int maxt = t[0] - 1; for (int y = 0; y < t.size(); y++) { // 잠기면 끝 if (mins >= t[y] || mind >= t[y]) return false; // 아니면 가능한 한 확장 if (t[y] > maxt) { maxt = t[y]; expand(sl, sr, mins, t[y]); expand(dl, dr, mind, t[y]); } // 확장한 구간이 겹치면 끝 int l = max(sl, dl); int r = min(sr, dr); if (l <= r) return true; } return false; }
#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...