Submission #1307764

#TimeUsernameProblemLanguageResultExecution timeMemory
1307764dolphyGlobal Warming (CEOI18_glo)C++20
100 / 100
130 ms16084 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pb(a) push_back(a)
#define pp pop_back
#define mp(a, b) make_pair(a, b)
int32_t main(){
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    int n, k, mx=0;
    cin >> n >> k;
    int t[n+1], maxsil[n+1];
    for (int i=1; i<=n; i++) cin >> t[i];
    map <int, int> m, m2; map <int, int>::iterator it;
    m2[INT_MAX]=0;
    for (int i=n; i>=1; i--) {
        it=m2.upper_bound(t[i]);
        int x=it->second+1;
        maxsil[i]=x;
        if (it!=m2.begin()) {it--; m2.erase(it);}
        m2[t[i]]=x;
    }
    m[0]=0;
    for (int i=1; i<n; i++) {
        it=m.lower_bound(t[i]);
        it--;
        int x=it->second+1;
        it++;
        if (it!=m.end()) m.erase(it);
        m[t[i]]=x;
        int a=t[i+1]+k;
        it=m.lower_bound(a);
        it--;
        //cout << maxsil[i+1] << " " << it->second << "\n";
        mx=max(mx, maxsil[i+1]+it->second);
    }
    cout << mx << "\n";
    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...