Submission #1305227

#TimeUsernameProblemLanguageResultExecution timeMemory
1305227nambanana987Global Warming (CEOI18_glo)C++20
100 / 100
139 ms13076 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define f first
#define s second
#define sz(a) (int)a.size()
#define all(a) a.begin(),a.end()
const int N=2e5+5;
int M[N];
vector<int>comp;

struct Fenwick{
    int n;
    vector<int>fen;

    Fenwick(int _n) : fen(_n+5,0) , n(_n){}

    void reset(){
        fill(all(fen),0);
    }
    int get(int i){
        int res=0;
        for(; i>0;i-=i&-i) res=max(res,fen[i]);
        return res;
    }

    void update(int id,int val){
        for( ; id<=n;id+=id&-id) fen[id]=max(fen[id],val);
    }


};
int compress(int val){
    return lower_bound(all(comp),val)-comp.begin()+1;
}

int dp0[N],dp1[N],dpr[N];
void solve(){
    int n,x;cin>>n>>x;
    for(int i=1;i<=n;++i) {
        cin>>M[i];
        comp.push_back(M[i]);
        comp.push_back(M[i]+x);
    }
    sort(all(comp));
    comp.erase(unique(all(comp)),comp.end());
    int m=sz(comp);
    Fenwick tree(m);
    for(int i=1;i<=n;++i){
        //khong dung x
        int id=compress(M[i]);
        int val=tree.get(id-1);
        dp0[i]=val+1;

        //dung x
        val=tree.get(compress(M[i]+x)-1);
        dp1[i]=val+1;

        tree.update(id,dp0[i]);
    }

    tree.reset();

    for(int i=n;i>=1;--i){
        int newid=m-compress(M[i])+1;
        dpr[i]=tree.get(newid-1)+1;
        tree.update(newid,dpr[i]);
    }
    int ma=0;

    for(int i=1;i<=n;++i){
        ma=max(ma,dp1[i]+dpr[i]-1);
    }
    cout<<ma;

}
signed main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int t=1;
    //cin>>t;
    while(t--) solve();
}
#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...