比赛 20120419s 评测结果 AAAAAAATTA
题目名称 河床 最终得分 80
用户昵称 201101 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2012-04-19 10:00:58
显示代码纯文本
/*
UID:cheepok
PID:riverbed
*/

#include<stdio.h>
#include<set>

using namespace std;

struct orz
{
	int x,y;
	bool operator <(const orz & other) const
	{
		if(x<other.x||(x==other.x&&y<other.y))
			return true;
		return false;
	}
};

multiset <orz> s;

multiset <orz> :: iterator it,it1;

int n,m,k,Max,ans,a[30001];

int max(int a,int b)
{
	return a>b?a:b;
}

int main()
{
	freopen("riverbed.in","r",stdin);
	freopen("riverbed.out","w",stdout);
	int i,j;orz tmp;
	scanf("%d%d",&n,&m);
	k=1;
	for(i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);Max=0;
		tmp.x=a[i]+m;tmp.y=0;
		for(it=s.upper_bound(tmp);it!=s.end();it++)
		{
			Max=max(Max,(*it).y);
		}
		tmp.x=a[i]-m;tmp.y=0;
		it1=s.lower_bound(tmp);
		for(it=s.begin();it!=it1;it++)
		{
			Max=max(Max,(*it).y);
		}
		for(j=k;j<=Max;j++)
		{
			tmp.x=a[j];tmp.y=j;
			s.erase(tmp);
		}
		k=Max+1;
		tmp.x=a[i];tmp.y=i;
		s.insert(tmp);
		ans=max(ans,s.size());
	}
	printf("%d\n",ans);
	return 0;
}