This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
using namespace std;
const int mxN = 2e5+5;
int n, x, arr[mxN], dp[mxN];
int main() {
cin >> n >> x;
for(int i = 1; i <= n; ++i) {
cin >> arr[i];
}
vector<int> lis;
for(int i = 1; i <= n; ++i) {
auto itr = lower_bound(lis.begin(), lis.end(), arr[i]);
dp[i] = itr - lis.begin() + 1;
if(itr == lis.end()) lis.emplace_back(arr[i]);
else *itr = arr[i];
}
int ans = 0;
vector<int> lds;
for(int i = n; i >= 1; --i) {
auto itr = lower_bound(lds.begin(), lds.end(), -arr[i]);
int from_right = itr - lds.begin();
ans = max(ans, dp[i] + from_right);
arr[i] += x;
auto itr2 = lower_bound(lds.begin(), lds.end(), -arr[i]);
if(itr2 == lds.end()) lds.emplace_back(-arr[i]);
else *itr2 = -arr[i];
}
cout << ans;
}
# | 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... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |