不知道为什么交G++的话,用printf反而比cout慢,而且就是慢了这零点几秒,刚好超时,我改了半天的代码,最后才找出是输出超时,还有一个解决的方法就是交c++。
#include<iostream>
#include<cstdio>
using namespace std;
const int mx = 1e6+10;
int p[mx],qmax[mx],qmin[mx],ansmax[mx],ansmin[mx];
int n,k;
//queue<int>q1,q2;
int main(){
//int T=10;
while(scanf("%d%d",&n,&k) != EOF){
for(int i = 0; i < n; i++)
scanf("%d",p+i);
int tail=0,head=0;
int tail2 = 0,head2 = 0;
for(int i = 0; i < n; i++){
if(tail > head && i - qmax[head] >= k ) //队首处理
head++;
if(tail2 > head2 && i - qmin[head2] >= k ) //队首处理 长度应当+1
head2++;
while(tail > head && p[i] >= p[qmax[tail-1]]) //队尾处理
tail--;
while(tail2 > head2 && p[i] <= p[qmin[tail2-1]])
tail2--;
qmax[tail++] = i;
qmin[tail2++] = i;
ansmax[i] = p[qmax[head]];
ansmin[i] = p[qmin[head2]];
}
for(int i = k - 1; i < n; i++)
printf("%d ",ansmin[i]);
puts("");
for(int i = k - 1; i < n; i++)
printf("%d ",ansmax[i]);
puts("");
}
return 0;
}