不知道为什么交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;
}