悬赏好多个关注,找不同
查看原帖
悬赏好多个关注,找不同
1291285
封禁用户楼主2024/7/29 18:46

我教练的代码:

#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,能说出这两个代码的不同之处吗

2024/7/29 18:46
加载中...