Submission #367918

#TimeUsernameProblemLanguageResultExecution timeMemory
367918ogibogi2004Global Warming (CEOI18_glo)C++14
100 / 100
1098 ms50176 KiB
#include<bits/stdc++.h>
using namespace std;
const int MAXN=2e5+6;
const int MAXM=2e6+6;
set<int>s;
int n,x;
int a[MAXN];
int fen[MAXM];
void update(int idx,int val)
{
	idx++;
	for(;idx<MAXM;idx+=idx&(-idx))
	{
		fen[idx]=max(fen[idx],val);
	}
}
int query(int idx)
{
	idx++;
	int ret=0;
	for(;idx>0;idx-=idx&(-idx))
	{
		ret=max(ret,fen[idx]);
	}
	return ret;
}
map<int,int>mp;
int dpl[MAXN],dpr[MAXN];
int main()
{
	cin>>n>>x;
	for(int i=1;i<=n;i++)cin>>a[i];
	for(int i=1;i<=n;i++)
	{
		s.insert(a[i]);
		s.insert(a[i]-x);
	}
	int cnt=1;
	for(auto xd:s)
	{
		++cnt;
		mp[xd]=cnt;
	}
	for(int i=1;i<=n;i++)
	{
		int j=mp[a[i]];
		dpl[i]=query(j-1)+1;
		update(j,dpl[i]);
	}
	memset(fen,0,sizeof(fen));
	for(int i=n;i>=1;i--)
	{
		int j=mp[a[i]];
		dpr[i]=query(MAXM-j-1)+1;
		update(MAXM-j,dpr[i]);
	}
	memset(fen,0,sizeof(fen));
	int ans=0;
	for(int i=n;i>=1;i--)
	{
		int j=mp[a[i]-x];
		ans=max(ans,dpl[i]+query(MAXM-j-1));
		j=mp[a[i]];
		update(MAXM-j,dpr[i]);
	}
	cout<<ans<<endl;
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...