Submission #970772

#TimeUsernameProblemLanguageResultExecution timeMemory
970772vjudge1Global Warming (CEOI18_glo)C++17
100 / 100
84 ms5064 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...