제출 #1229116

#제출 시각아이디문제언어결과실행 시간메모리
1229116adadRabbit Carrot (LMIO19_triusis)C++20
0 / 100
3 ms328 KiB
#include <bits/stdc++.h> using namespace std; const int MAX = 2e5 + 5; int seg[4 * MAX]; void update(int id, int l, int r, int pos, int val) { if (l == r) { seg[id] = max(seg[id], val); return; } int mid = (l + r) / 2; if (pos <= mid) update(id * 2, l, mid, pos, val); else update(id * 2 + 1, mid + 1, r, pos, val); seg[id] = max(seg[id * 2], seg[id * 2 + 1]); } int get(int id, int l, int r, int u, int v) { if (v < l || r < u) return 0; if (u <= l && r <= v) return seg[id]; int mid = (l + r) / 2; return max(get(id * 2, l, mid, u, v), get(id * 2 + 1, mid + 1, r, u, v)); } int main() { int n, m; cin >> n >> m; vector<int> a(n + 1), all; a[0] = 0; all.push_back(0); for (int i = 1; i <= n; ++i) { cin >> a[i]; all.push_back(a[i]); } // compress height sort(all.begin(), all.end()); all.erase(unique(all.begin(), all.end()), all.end()); auto get_index = [&](int x) { return lower_bound(all.begin(), all.end(), x) - all.begin(); }; int sz = all.size(); vector<int> dp(n + 1); update(1, 0, sz - 1, get_index(0), 0); // dp[0] = 0 at height 0 for (int i = 1; i <= n; ++i) { int max_jump_from = a[i] - m; int l = lower_bound(all.begin(), all.end(), max_jump_from) - all.begin(); int r = sz - 1; dp[i] = get(1, 0, sz - 1, l, r) + 1; update(1, 0, sz - 1, get_index(a[i]), dp[i]); } int max_dp = *max_element(dp.begin(), dp.end()); cout << n - max_dp << '\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...