Submission #764239

#TimeUsernameProblemLanguageResultExecution timeMemory
764239raysh07Radio Towers (IOI22_towers)C++17
23 / 100
4035 ms18388 KiB
#include "towers.h" #include <bits/stdc++.h> using namespace std; const int maxn = 1e5 + 69; int a[maxn]; int n; map <int, int> mp, inv; vector <int> b; int dp[maxn][2]; int seg[4 * maxn][2]; void upd(int l, int r, int pos, int qp, int v, int i){ if (l == r){ seg[pos][i] = v; return; } int mid = (l + r)/2; if (qp <= mid) upd(l, mid, pos*2, qp, v, i); else upd(mid + 1, r, pos*2 + 1, qp, v, i); seg[pos][i] = max(seg[pos * 2][i], seg[pos * 2 + 1][i]); } int query(int l, int r, int pos, int ql, int qr, int i){ if (l >= ql && r <= qr) return seg[pos][i]; else if (l > qr || r < ql) return 0; int mid = (l + r)/2; return max(query(l, mid, pos*2, ql, qr, i), query(mid + 1, r, pos*2 + 1, ql, qr, i)); } void init(int N, vector<int> H) { n = N; for (int i = 0; i < N; i++){ a[i + 1] = H[i]; } set <int> st; for (int i = 1; i <= n; i++) st.insert(a[i]); int ptr = -1; st.insert(-1e9); st.insert(2e9 + 1); for (auto x : st){ mp[x] = ++ptr; inv[ptr] = x; b.push_back(x); } for (int i = 1; i <= n; i++) { a[i] = mp[a[i]]; } } int max_towers(int l, int r, int d) { l++; r++; int ans = 0; for (int i = l; i <= r; i++){ int x = inv[a[i]]; int pos = upper_bound(b.begin(), b.end(), x - d) - b.begin() - 1; dp[i][0] = query(1, n, 1, 1, pos, 0); upd(1, n, 1, a[i], dp[i][0], 1); pos = lower_bound(b.begin(), b.end(), x + d) - b.begin(); dp[i][1] = 1 + query(1, n, 1, pos, n, 1); upd(1, n, 1, a[i], dp[i][1], 0); ans = max(ans, dp[i][0]); ans = max(ans, dp[i][1]); } return ans; }
#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...