为什么会运行错误呢qwq
查看原帖
为什么会运行错误呢qwq
549521
boy♂Next♂dooor楼主2023/10/5 12:50
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+5;
int n,k;
struct node{
	int xu,w;
}a[N];
queue<node> q1;
queue<node> q2;
int ans1[N],ans2[N],top;
int main()
{
	scanf("%d %d",&n,&k);
	for(int i=1;i<=n;i++) scanf("%d",&a[i].w);
	for(int i=1;i<=n;i++) a[i].xu=i;
	for(int i=1;i<=k;i++)
	{
		q1.push(a[i]);	
		if(!q1.empty()&&a[i].w<q1.back().w)
		{
			q1.pop();q1.push(a[i]);
		}
		q2.push(a[i]);	
		if(!q2.empty()&&a[i].w>q2.back().w)
		{
			q2.pop();q2.push(a[i]);
		}
	}
	ans1[++top]=q1.back().w;ans2[top]=q2.back().w;
	for(int i=k+1;i<=n;i++)
	{
		if(!q1.empty()&&a[i].w<q1.back().w)
		{
			q1.push(a[i]);
		}		
		if(!q2.empty()&&a[i].w>q2.back().w)	
		{
			q2.push(a[i]);
		}
		while(i-q1.back().xu>=k) q1.pop();
		while(i-q2.back().xu>=k) q2.pop();
		ans1[++top]=q1.back().w;ans2[top]=q2.back().w;
	}
	for(int i=1;i<=top;i++) printf("%d ",ans1[i]);
	printf("\n");
	for(int i=1;i<=top;i++) printf("%d ",ans2[i]);
	return 0;
}

借鉴了题解中优先队列的做法,但一开始自己做的时候用了queue所以后来就直接手动比较了,但不知道哪里错了TAT

2023/10/5 12:50
加载中...