社区讨论
这题数据有毒
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 条回复,欢迎继续交流。
正在加载回复...