Submission #1218529

#TimeUsernameProblemLanguageResultExecution timeMemory
1218529gvancakGlobal Warming (CEOI18_glo)C++20
100 / 100
41 ms6796 KiB
#include <bits/stdc++.h>
#define f first
#define s second
#define pb push_back
#define mp make_pair
#define ll long long
using namespace std;
ll mod=1e9+7;
ll a[1000005],p[1000005],l,r,x,y,z,ans,t,n,q,mx,mn,k,d,dp[1000005],dp1[1000005],ind;
map <ll,ll> m;
bool ok,okk;
string s1;
set <ll> s;
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0),cout.tie(0);
    t=1;
    //cin>>t;
    while (t--){

	cin>>n>>d;
	for (int i=1; i<=n; i++){
		cin>>a[i];
		dp[i]=1e9; dp1[i]=1e9;
	}
	
	ans=0;
	for (int i=1; i<=n; i++){
		ind=lower_bound(dp+1,dp+n+1,a[i]-d)-dp;
		dp[ind]=a[i]-d; p[i]=ind; ans=max(ans,ind);
	}
	
	for (int i=1; i<=n/2; i++) swap(a[i],a[n-i+1]);
	
	for (int i=1; i<=n; i++){
		ind=lower_bound(dp1+1,dp1+n+1,d-a[i])-dp1;
		ans=max(ans,p[n-i+1]+ind-1);
		
		ind=lower_bound(dp1+1,dp1+n+1,-a[i])-dp1; dp1[ind]=-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...