제출 #947222

#제출 시각아이디문제언어결과실행 시간메모리
947222Nhoksocqt1송신탑 (IOI22_towers)C++17
15 / 100
4056 ms1624 KiB
#ifndef Nhoksocqt1 #include "towers.h" #endif // Nhoksocqt1 #include<bits/stdc++.h> using namespace std; #define inf 0x3f3f3f3f #define sz(x) int((x).size()) #define fi first #define se second typedef long long ll; typedef pair<int, int> ii; template<class X, class Y> inline bool maximize(X &x, const Y &y) {return (x < y ? x = y, 1 : 0);} template<class X, class Y> inline bool minimize(X &x, const Y &y) {return (x > y ? x = y, 1 : 0);} mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); int Random(int l, int r) { return uniform_int_distribution<int>(l, r)(rng); } const int MAXN = 100005; int dp[MAXN]; int h[MAXN], nArr, ksub1; bool check_sub1; void init(int _N, vector<int> _H) { nArr = _N; ksub1 = 1; for (int i = 1; i <= nArr; ++i) { h[i] = _H[i - 1]; if(h[ksub1] < h[i]) ksub1 = i; } check_sub1 = 1; for (int i = 3; i <= nArr; ++i) check_sub1 &= (h[i - 2] < h[i - 1] || h[i - 1] > h[i]); } int max_towers(int l, int r, int d) { ++l, ++r; if(check_sub1) { int res = 1 + (l < ksub1 && ksub1 < r && max(h[l], h[r]) <= h[ksub1] - d); return res; } for (int i = l; i <= r; ++i) dp[i] = 1; for (int i = l; i <= r; ++i) { int k(i + 1); for (int j = i + 2; j <= r; ++j) { if(h[k] - d >= max(h[i], h[j])) dp[j] = max(dp[j], dp[i] + 1); if(h[j] > h[k]) k = j; } } int res(0); for (int i = l; i <= r; ++i) res = max(res, dp[i]); return res; } #ifdef Nhoksocqt1 int main(void) { ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0); #define TASK "towers" if(fopen(TASK".inp", "r")) { freopen(TASK".inp", "r", stdin); freopen(TASK".out", "w", stdout); } vector<int> _H; int _N, _Q; cin >> _N; _H.resize(_N); for (int i = 0; i < _N; ++i) cin >> _H[i]; init(_N, _H); cin >> _Q; for (int t = 0; t < _Q; ++t) { int _L, _R, _D; cin >> _L >> _R >> _D; cout << "ANSWER FOR " << _L + 1 << ' ' << _R + 1 << ' ' << _D << ": " << max_towers(_L, _R, _D) << '\n'; } return 0; } #endif // Nhoksocqt1
#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...