Submission #1338364

#TimeUsernameProblemLanguageResultExecution timeMemory
1338364charlestititititGlobal Warming (CEOI18_glo)C++20
100 / 100
40 ms3116 KiB
#include <bits/stdc++.h>
using namespace std;

int a[200069];
int lis[200069], lds[200069];
vector<int> I, D;

signed main(){

    cin.tie(0); ios::sync_with_stdio(0);

    int n, x; cin >> n >> x;
    for(int i=1; i<=n; i++) cin >> a[i];

    int sz = 0;
    for(int i=1; i<=n; i++){
        int idx = lower_bound(I.begin(), I.end(), a[i]) - I.begin();
        if(idx == sz){
            I.push_back(a[i]);
            sz++;
        }
        else I[idx] = a[i];
        lis[i] = idx+1;
    }

    int mx = 0;
    sz = 0;

    for(int i=n; i>=1; i--){
        mx = max(mx, lis[i] + (int)(lower_bound(D.begin(), D.end(), -a[i] + x) - D.begin()));
        int idx = lower_bound(D.begin(), D.end(), -a[i]) - D.begin();
        if(idx == sz){
            D.push_back(-a[i]);
            sz++;
        }
        else D[idx] = -a[i];
    }

    cout << mx;

    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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...