Submission #705293

#TimeUsernameProblemLanguageResultExecution timeMemory
705293VladPislaruRabbit Carrot (LMIO19_triusis)C++17
100 / 100
99 ms7676 KiB
#include <bits/stdc++.h> using namespace std; const int MaxN = 200005; int n, m; long long a[MaxN], b[MaxN], k; int dp[MaxN], aib[MaxN]; pair <int, int> c[MaxN]; void Update (int poz, int val) { for (int i = poz; i <= n; i += (i & -i)) aib[i] = max(aib[i], val); } int Query (int poz) { int val = 0; for (int i = poz; i > 0; i -= (i & -i)) val = max(val, aib[i]); return val; } int main() { cin >> n >> m; for (int i = 1; i <= n; i++) { cin >> a[i]; if (m * i >= a[i]) { b[++k] = 1LL * m * i - a[i]; c[k] = {b[k], k}; } } sort (c + 1, c + k + 1); int val = 1; b[c[1].second] = 1; for (int i = 2; i <= k; i++) { if (c[i].first != c[i - 1].first) val++; b[c[i].second] = val; } int ans = 0; if (k) { ans = 1; for (int i = 1; i <= k; i++) { dp[i] = max(1, 1 + Query(b[i])); Update(b[i], dp[i]); ans = max(ans, dp[i]); } } cout << n - ans << "\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...