제출 #1256289

#제출 시각아이디문제언어결과실행 시간메모리
1256289_filya_Rabbit Carrot (LMIO19_triusis)C++20
100 / 100
216 ms20204 KiB
#include<bits/stdc++.h> typedef long long ll; using namespace std; struct segtree { vector<ll> tree; int size; void init(int n) { size = 1; while (size < n) size *= 2; tree.assign(2 * size - 1, 0); } void build(vector<int>& a, int x, int lx, int rx) { if (rx - lx == 1) { if (lx < a.size()) tree[x] = a[lx]; } else { int m = (lx + rx) / 2; build(a, 2 * x + 1, lx, m); build(a, 2 * x + 2, m, rx); tree[x] = max(tree[2 * x + 1], tree[2 * x + 2]); } } void build(vector<int>& a) { init(a.size()); build(a, 0, 0, size); } void set(int i, int v, int x, int lx, int rx) { if (rx - lx == 1) { tree[x] = v; return; } int m = (lx + rx) / 2; if (i < m) { 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); } ll query(int l, int r, int x, int lx, int rx) { if (l >= rx || r <= lx) { return 0; } if (lx >= l && rx <= r) { return tree[x]; } int m = (lx + rx) / 2; ll mi1 = query(l, r, 2 * x + 1, lx, m); ll mi2 = query(l, r, 2 * x + 2, m, rx); return max(mi1, mi2); } ll query(int l, int r) { return query(l, r, 0, 0, size); } }; void compress(vector<ll>& a) { int n = a.size(); vector<ll> b = a; map<ll, ll> mp; sort(b.begin(), b.end()); for (int i = 0; i < n; i++) { mp[b[i]] = i + 1; } for (int i = 0; i < n; i++) { a[i] = mp[a[i]]; } } int main() { // ifstream cin("input.txt"); // ofstream cout("output.txt"); ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); ll n, m; cin >> n >> m; vector<ll> a(n + 1); segtree dp; dp.init(n + 10); auto f = [&](ll x) -> ll { return x * m - a[x]; }; for (int i = 1; i <= n; i++) { cin >> a[i]; a[i] = f(i); } compress(a); ll ans = 0; for (int i = n; i >= 0; i--) { ll nw = max(dp.query(a[i], n + 10) + 1, dp.query(a[i], a[i + 1])); dp.set(a[i], nw); if (!i) ans = nw; } cout << a.size() - ans << '\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...