我教练的代码:
#include<bits/stdc++.h>
using namespace std;
const int N=3e6+5;
int n,k,ans;
int a[N];
deque<int>qmax,qmin;
bool check_inq(int x){
while(!qmax.empty()&&a[x]>=a[qmax.back()]) qmax.pop_back();
qmax.push_back(x);
while(!qmin.empty()&&a[x]<=a[qmin.back()]) qmin.pop_back();
qmin.push_back(x);
return a[qmax.front()]-a[qmin.front()]<=k;
}
bool check_ouq(int x){
if(!qmax.empty()&&qmax.front()<=x) qmax.pop_front();
if(!qmin.empty()&&qmin.front()<=x) qmin.pop_front();
return a[qmax.front()]-a[qmin.front()]<=k;
}
int main(){
scanf("%d%d",&k,&n);
for(int i=1;i<=n;++i)
scanf("%d",a+i);
int l=1,r=1;
while(r<=n){
while(check_inq(r)&&r<=n){
++r;
ans=max(ans,r-l);
}
++r;
while(!check_ouq(l)&&l<r)
++l;
++l;
ans=max(ans,r-l);
}
printf("%d\n",ans);
return 0;
}
我的代码:
#include<bits/stdc++.h>
using namespace std;
const int N=3e6+5;
int a[N];
deque<int> qmax,qmin;
int n,k;
bool check_inq(int x){
while(!qmax.empty()&&a[x]>=a[qmax.back()]) qmax.pop_back();
qmax.push_back(x);
while(!qmin.empty()&&a[x]<=a[qmin.back()]) qmin.pop_back();
qmin.push_back(x);
return a[qmax.front()]-a[qmin.front()]<=k;
}
bool check_ouq(int x){
if(!qmax.empty()&&qmax.front()<=x) qmax.pop_front();
if(!qmin.empty()&&qmin.front()<=x) qmin.pop_front();
return a[qmax.front()]-a[qmin.front()]<=k;
}
signed main(){
int n,k;
cin>>k>>n;
for(int i=1;i<=n;++i) cin>>a[i];
int l=1,r=1,ans=0;
while(r<=n){
while(check_inq(r)&&r<=n){
++r;
ans=max(ans,r-l);
}
++r;
while(!check_ouq(l)&&l<r){
++l;
}
++l;
ans=max(ans,r-l);
}
cout<<ans<<endl;
return 0;
}
感觉都一样,为什么一个WA一个AC,能说出这两个代码的不同之处吗