제출 #1214393

#제출 시각아이디문제언어결과실행 시간메모리
1214393goduadzesabaGlobal Warming (CEOI18_glo)C++20
100 / 100
610 ms34920 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e6+5,mod=1e9+7,inf=2e18;
int n,x,k,a[N],b[N],dp[N],ds[N],f[N],ans;
map <int,int> mp;
int get(int x){
	int ret=0;
	for (int i=x; i>0; i-=i&(-i))
		ret=max(ret,f[i]);
	return ret;
}
void upd(int x,int y){
	for (int i=x; i<=k; i+=i&(-i))
		f[i]=max(f[i],y);
}
signed main(){
	ios_base::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
	cin>>n>>x; dp[0]=0;
	for (int i=1; i<=n; i++){
		cin>>a[i]; mp[a[i]]=0; mp[a[i]-x]=0;
	}
	for (auto &i:mp) i.second=++k;
	for (int i=1; i<=n; i++){
		b[i]=mp[a[i]];
		dp[i]=get(b[i]-1)+1; upd(b[i],dp[i]);
	}
	for (int i=1; i<=k; i++) f[i]=0; ans=0;
	for (int i=n; i>0; i--){
		ds[i]=get(k-b[i])+1; 
		ans=max(ans,get(k-mp[a[i]-x])+dp[i]);
		upd(k-b[i]+1,ds[i]);
	}
	cout<<ans;
}
#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...