Submission #1016022

#TimeUsernameProblemLanguageResultExecution timeMemory
1016022vjudge1Rabbit Carrot (LMIO19_triusis)C++17
100 / 100
105 ms8396 KiB
#include <bits/stdc++.h> using namespace std; const int inf = 1109200169; vector<long long> tbc{0}; void compress() {sort(tbc.begin(), tbc.end()); tbc.resize(unique(tbc.begin(), tbc.end()) - tbc.begin());} int order(long long key) {return lower_bound(tbc.begin(), tbc.end(), key) - tbc.begin() + 1;} long long a[200008]; struct Segment_Tree { int n; int node[(1 << 19) + 8]; Segment_Tree() {fill(node + 1, node + (1 << 19) + 8, -inf);}; void update(int id, int l, int r, int i, int val) { if (l == r) {node[id] = max(node[id], val); return;} int mid = (l + r) / 2; if (i <= mid) update(id * 2, l, mid, i, val); else update(id * 2 + 1, mid + 1, r, i, val); node[id] = max(node[id * 2], node[id * 2 + 1]); } int query(int id, int l, int r, int u, int v) { if (r < u || v < l) return -inf; if (u <= l && r <= v) return node[id]; int mid = (l + r) / 2; int opt1 = query(id * 2, l, mid, u, v); int opt2 = query(id * 2 + 1, mid + 1, r, u, v); return max(opt1, opt2); } void update(int i, int val) {update(1, 1, n, i, val);} int query(int l, int r) {return query(1, 1, n, l, r);} } tree; int dp[200008]; signed main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n, m, ans = 1; cin >> n >> m; for (int i = 1; i <= n; ++i) cin >> a[i], a[i] = -(a[i] - 1LL * i * m), tbc.push_back(a[i]); compress(); tree.n = tbc.size(); for (int i = 0; i <= n; ++i) a[i] = order(a[i]); dp[0] = 1; tree.update(a[0], dp[0]); for (int i = 1; i <= n; ++i) { dp[i] = tree.query(1, a[i]) + 1; tree.update(a[i], dp[i]); ans = max(ans, dp[i]); } cout << n + 1 - 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...