Submission #882740

#TimeUsernameProblemLanguageResultExecution timeMemory
882740AongGlobal Warming (CEOI18_glo)C++14
100 / 100
52 ms5460 KiB
#include <bits/stdc++.h>
using namespace std;
#define sp(x) fixed << setprecision(x) 
#define endl '\n'
#define all(sord) sord.begin(),sord.end() 
#define pii pair<int,int>
#define f first
#define s second
#define pb push_back
#define ll long long
int a[200010],lisend[200010];
int main(){
    cin.tie(nullptr)->sync_with_stdio(0);
    int n,x,idx,cnt=0,lis=0;
    cin >> n >> x;
    for(int i=0;i<n;i++){
        cin >> a[i];
    }
    vector<int> dp(n,INT_MAX);
    for(int i=0;i<n;i++){
        idx = lower_bound(dp.begin(),dp.end(),a[i]) - dp.begin();
        if(idx == cnt) cnt++;
        dp[idx] = a[i];
        lisend[i] = idx+1;
        lis = max(lis,lisend[i]);
    }
    dp = vector<int>(n,INT_MAX);
    for(int i = n;i>=0;i--){
        idx = lower_bound(dp.begin(),dp.end(), -1 * a[i] + x) - dp.begin();
        lis = max(lisend[i] + idx, lis );
        idx = lower_bound(dp.begin(),dp.end(), -1 * a[i]) - dp.begin();
        dp[idx] =  -1 * a[i];
    }
    cout << lis;
    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...