社区讨论

这题数据有毒

P1886【模板】单调队列 / 滑动窗口参与者 5已保存回复 6

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
6 条
当前快照
1 份
快照标识符
@mi6xuz7j
此快照首次捕获于
2025/11/20 12:36
4 个月前
此快照最后确认于
2025/11/20 12:36
4 个月前
查看原帖
第一个数据下载了之后本地评测能过,提交就wa了,求大佬帮看
CPP
#include<iostream>
#include<cstring>
#include<cstdio>
#define MAXN 1000000+10
using namespace std;
inline int read(){
	int out=0,f=1;
	char c=getchar();
	if(c==45) f=-1;
	while(c<48||c>57) c=getchar();
	while(c<=57&&c>=48){
		out=(out<<1)+(out<<3)+c-48;
		c=getchar();
	}
	return out*f;
}
void write(int x){
	if(x<0){
		putchar(45);
		x=-x;
	}
	if(x>9) write(x/10);
	putchar(x%10+48);
}
int qmax[MAXN],pmax[MAXN];
int qmin[MAXN],pmin[MAXN];
int a[MAXN];
int n,m;
int main(){
	n=read();
	m=read();
	int head1=1,head2=1;
	int tail2=0,tail1=0;
	for(int i=1;i<=n;++i) a[i]=read();
	for(int i=1;i<=n;++i){
		int x=a[i];
		while(head2<=tail2&&qmin[tail2]>=x) --tail2;
		qmin[++tail2]=x;
		pmin[tail2]=i;
		while(pmin[head2]<=i-m) ++head2;
		if(i>=m){
			write(qmin[head2]);
			putchar(32);
		}
	}
	putchar(10);
	for(int i=1;i<=n;++i){
		int x=a[i];
		while(head1<=tail1&&qmax[tail1]<=x) --tail1;
		qmax[++tail1]=x;
		pmax[tail1]=i;
		while(pmax[head1]<=i-m) ++head1;
		if(i>=m){
			write(qmax[head1]);
			putchar(32);
		}
	}	
	return 0;
}

回复

6 条回复,欢迎继续交流。

正在加载回复...