一个问题
  • 板块学术版
  • 楼主Jim_Franklin
  • 当前回复5
  • 已保存回复5
  • 发布时间2023/2/3 18:20
  • 上次更新2023/10/24 01:51:38
查看原帖
一个问题
686342
Jim_Franklin楼主2023/2/3 18:20

这条程序,调试的时候,加下面这句话就会死循环,而不加就不会,这是为什么?

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ri register
const int inf=0x3f3f3f;
inline int rd()
{
	int x=0,y=1;char c=getchar();
	for(;c<'0'||c>'9';c=getchar())if(c=='-')y=-1;
	for(;c>='0'&&c<='9';c=getchar())x=(x<<1)+(x<<3)+(c^48);
	return x*y;
}
const int N=1e6+5;
int n,k,a[N];
int tail1,tail2,q1[N],q2[N],ans,head1=1,head2=1;
int main()
{
	n=rd();k=rd();
	for(int i=1;i<=n;i++)a[i]=rd();
	for(int i=1;i<=n;i++)
	{
		int j;
		while(tail1>=head1&&q1[head1]<i)head1++;
		while(tail2>=head2&&q2[head2]<i)head2++;
		for(j=i;j<=n&&a[q1[head1]]-a[q2[head2]]<=k;j++)
		{
			while(tail1>=head1&&a[q1[tail1]]<a[j])tail1--;
			while(tail2>=head2&&a[q2[tail2]]>a[j])tail2--;
			q1[++tail1]=j;
			q2[++tail2]=j;
			cout<<q1[head1]<<' '<<q2[head2]<<'\n';//这句话
		}
		j--;
		ans=max(ans,j-i+1);
		if(j==q1[head1])i=q2[head1]+1;
		else i=q1[head1]+1;
	}
	cout<<ans;
	return 0;
}

2023/2/3 18:20
加载中...