제출 #1248265

#제출 시각아이디문제언어결과실행 시간메모리
1248265aykhn송신탑 (IOI22_towers)C++20
0 / 100
4054 ms1968 KiB
#include "towers.h" #include <bits/stdc++.h> using namespace std; int n; vector<int> arr; void init(int N, vector<int> H) { n = N, arr = H; } int max_towers(int L, int R, int D) { vector<int> l(n), r(n); for (int i = 0; i < n; i++) { l[i] = i - 1, r[i] = i + 1; while (l[i] >= 0 && arr[l[i]] - arr[i] < D) l[i]--; while (r[i] < n && arr[r[i]] - arr[i] < D) r[i]++; } int st = L, en = R; for (int i = L; i <= R; i++) { if (r[i] < r[st]) st = i; } for (int i = R; i >= L; i--) { if (l[i] > l[en]) en = i; } assert(st <= en); if (st == en) return 1; int res = 2, prv = st; while (1) { int nxt = -1; for (int i = prv + 1; i < en; i++) { if (!(l[i] > prv && r[i] < en)) continue; if (nxt == -1) nxt = i; else if (r[nxt] > r[i]) nxt = i; } if (nxt == -1) break; res++; prv = nxt; } return res; }
#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...