제출 #1218060

#제출 시각아이디문제언어결과실행 시간메모리
1218060lukasuliashviliGlobal Warming (CEOI18_glo)C++20
100 / 100
78 ms6472 KiB
#include<bits/stdc++.h>
using namespace std;
#define int long long 
#define first fs 
#define sc second 
#define pb push_back
#define int long long 
#define rep(i,a,b) for(int i=a; i<=b; i++)
const int N=1e6+5;
int ans,suf[N],pref[N],dppr[N],dpsuf[N],a[N];
signed main(){
    int n,x;
    cin>>n>>x;rep(i,1,n){cin>>a[i];dppr[i]=1e18;dpsuf[i]=1e18;}
    rep(i,1,n){
        int idx=lower_bound(dppr+1,dppr+n+1,a[i]-x)-dppr;
        dppr[idx]=a[i]-x;
        pref[i]=idx;
        ans=max(ans,idx);
    }
    
    reverse(a+1,a+n+1);
    rep(i,1,n){
        int idx2=lower_bound(dpsuf+1,dpsuf+n+1,-(a[i]-x))-dpsuf;
        ans=max(ans,pref[n-i+1]+idx2-1);
        int idx=lower_bound(dpsuf+1,dpsuf+n+1,-a[i])-dpsuf;
        dpsuf[idx]=-a[i];
    }
    cout<<ans<<endl;

}
#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...