这条程序,调试的时候,加下面这句话就会死循环,而不加就不会,这是为什么?
#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;
}