제출 #770989

#제출 시각아이디문제언어결과실행 시간메모리
770989The_SamuraiRabbit Carrot (LMIO19_triusis)C++17
100 / 100
200 ms15304 KiB
#include "bits/stdc++.h" using namespace std; using ll = long long; const int inf = 1e9; struct segtree { int size, neutral_element = -inf; vector<int> tree; void init(int n) { size = 1; while (size < n) size *= 2; tree.assign(2 * size - 1, neutral_element); } int get(int l, int r, int x, int lx, int rx) { if (l >= rx or lx >= r) { return neutral_element; } if (l <= lx and rx <= r) { return tree[x]; } int m = (lx + rx) >> 1; return max(get(l, r, 2 * x + 1, lx, m), get(l, r, 2 * x + 2, m, rx)); } int get(int l, int r) { return get(l, r + 1, 0, 0, size); } void set(int i, int v, int x, int lx, int rx) { if (rx - lx == 1) { tree[x] = max(tree[x], v); return; } int m = (lx + rx) >> 1; if (m > i) { set(i, v, 2 * x + 1, lx, m); } else { set(i, v, 2 * x + 2, m, rx); } tree[x] = max(tree[2 * x + 1], tree[2 * x + 2]); } void set(int i, int v) { set(i, v, 0, 0, size); } }; void solve() { int n, m; cin >> n >> m; vector<int> a(n + 1), dp(n + 1, -inf); map<int, int> mp; mp[0]; for (int i = 1; i <= n; i++) { cin >> a[i]; a[i] = -(a[i] - m * i); mp[a[i]]; } int z = 0; for (auto &it: mp) { it.second = z++; } segtree sg; sg.init(mp.size()); sg.set(mp[0], 0); for (int i = 1; i <= n; i++) { a[i] = mp[a[i]]; sg.set(a[i], sg.get(0, a[i]) + 1); } cout << n - sg.tree[0]; } int main() { ios_base::sync_with_stdio(false); cout.tie(nullptr); cin.tie(nullptr); int queries = 1; #ifdef test_cases freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); cin >> queries; #else // cin >> queries; #endif for (int test_case = 1; test_case <= queries; test_case++) { solve(); cout << '\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...