码迷,mamicode.com
首页 > 其他好文 > 详细

【单调队列】bzoj2096 [Poi2010]Pilots

时间:2015-03-07 08:31:22      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:

用两个单调队列维护序列中的最大值和最小值即可。

poi~

#include<cstdio>
#include<algorithm>
using namespace std;
int m,n,head[2]={1,1},tail[2]={1,1},q[2][3000001],a[3000001],ans;
int main()
{
	scanf("%d%d",&m,&n);
	for(int i=1;i<=n;++i)
	  scanf("%d",&a[i]);
	q[0][1]=q[1][1]=1;
	int i=2,j=1;
	while(1)
	  {
	  	while(i<=n&&a[q[1][head[1]]]-a[q[0][head[0]]]<=m)
	  	  {
	  		while(a[i]<=a[q[0][tail[0]]] && tail[0]>=head[0]) --tail[0];
	  		q[0][++tail[0]]=i;
	  		while(a[i]>=a[q[1][tail[1]]] && tail[1]>=head[1]) --tail[1];
	  		q[1][++tail[1]]=i;
	  		++i;
	  	  }
		if(i>n)
		  {
		  	if(a[q[1][head[1]]]-a[q[0][head[0]]]<=m)
		  	  ans=max(ans,i-j);
		  	else
		  	  ans=max(ans,i-j-1);
		  	break;
		  }
		ans=max(ans,i-j-1);
		for(j=min(q[0][head[0]],q[1][head[1]]);
		a[q[1][head[1]]]-a[q[0][head[0]]]>m;
		++j)
		  {
		  	if(q[0][head[0]]==j) ++head[0];
		  	if(q[1][head[1]]==j) ++head[1];
		  }
	  }
	printf("%d\n",ans);
	return 0;
}

【单调队列】bzoj2096 [Poi2010]Pilots

标签:

原文地址:http://www.cnblogs.com/autsky-jadek/p/4319683.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!