# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
676256 | omikron123 | Rabbit Carrot (LMIO19_triusis) | C++14 | 29 ms | 3080 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
// https://oj.uz/problem/view/LMIO19_triusis
#include <cstdio>
#include <algorithm>
#include <functional>
#include <vector>
#include <cstring>
using namespace std;
typedef long long ll;
/*
5 400
300 700 200 1000 500
dp[i][j]:到达第i个柱子,调整j个柱子时,能达到的最大的高度。
Slack:
- 100 0 900 -400 900: a[i]+x, a[i]-x,找到最短的区间,使得和大于0?
Maximize # of poles that do not change:
- Find a subsequence where no gap is larger than d*M
- M*i - a[i],问题就变成了在这个中间寻找LIS
*/
int n, m;
int b[200005];
int main() {
scanf("%d %d", &n, &m);
vector<int> dp; // LIS
dp.push_back(0);
for (int i = 1; i <= n; i++) {
int a;
scanf("%d", &a);
int b = m*i - a;
if (b < 0) continue;
auto it = upper_bound(dp.begin(), dp.end(), b);
if (it == dp.end())
dp.push_back(b);
else
*it = b;
}
printf("%d", n-dp.size()+1);
return 0;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |