Submission #1301099

#TimeUsernameProblemLanguageResultExecution timeMemory
1301099nikakhObstacles for a Llama (IOI25_obstacles)C++17
0 / 100
93 ms53676 KiB
#include <bits/stdc++.h> using namespace std; const int LOG = 20; int N, M; vector<int> T, H, pref; vector<vector<int>> mx, mn, mxT; void initialize(vector<int> T, vector<int> H) { N = (int)T.size(), M = (int)H.size(); ::T.resize(N); ::H.resize(M); pref.resize(N); mx.resize(LOG, vector<int> (M)); mn.resize(LOG, vector<int> (M)); mxT.resize(LOG, vector<int> (N)); for(int i = 0; i < N; i++){ ::T[i] = T[i]; mxT[0][i] = T[i]; if(!i) pref[i] = T[i]; else pref[i] = min(pref[i - 1], T[i]); } for(int i = 0; i < M; i++){ ::H[i] = H[i]; mx[0][i] = H[i]; mn[0][i] = H[i]; } for(int i = 1; i < LOG; i++){ for(int j = 0; j + (1 << i) <= M; j++){ mx[i][j] = max(mx[i - 1][j], mx[i - 1][j + (1 << (i - 1))]); mn[i][j] = min(mn[i - 1][j], mn[i - 1][j + (1 << (i - 1))]); } for(int j = 0; j + (1 << i) <= N; j++){ mxT[i][j] = max(mxT[i - 1][j], mxT[i - 1][j + (1 << (i - 1))]); } } } bool check(int &temp, int &start, int &end){ int k = 31 - __builtin_clz(end - start + 1); return temp > max(mx[k][start], mx[k][end - (1 << k) + 1]); } bool can_reach(int LL, int RR, int S, int D) { if(S > D) swap(S, D); int i = 0, j = S; while(1){ int L = i, R = N - 1, res; while(L <= R){ int mid = L + (R - L) / 2; if(pref[mid] > H[j]){ res = mid; L = mid + 1; } else{ R = mid - 1; } } int d = 31 - __builtin_clz(res - i + 1); int maxT = max(mxT[d][i], mxT[d][res - (1 << d) + 1]); while(T[i] != maxT) i++; L = j, R = D, res; while(L <= R){ int mid = L + (R - L) / 2; if(check(T[i], j, mid)){ res = mid; L = mid + 1; } else{ R = mid - 1; } } if(res == j) return 0; if(res >= D) return 1; int k = 31 - __builtin_clz(res - j + 1); int minH = min(mn[k][j], mn[k][res - (1 << k) + 1]); if(H[j] == minH) return 0; while(H[j] != minH) j++; } }
#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...