这道题卡输入输出
#include "stdio.h" #include "cctype" #define LEN 1000005 struct Window { int index; int values; }; struct Window Qu[LEN]; int AllData[LEN]; int n,k; short Com1(int v1,int v2){ return (v1 > v2); } short Com2(int v1,int v2){ return (v1 < v2); } inline void put(int x){ static char s[20]; int bas; if(x< 0) { putchar('-'); x = -x; } if(x == 0){ putchar('0'); return; } bas = 0; for(;x;x/=10) s[bas++] = x%10+'0'; for(;bas--;) putchar(s[bas]); } inline int Rint(){ char c; while(!isdigit(c = getchar()) && c != '-'); int t, s = 1; if (c == '-') s = t = 0; else t = c ^ 48; while(isdigit(c = getchar())) t = (t << 1) + (t << 3) + (c ^ 48); return s?t:-t; } void ShowValues(short flag){ int i,r,QMaxHead,j = k - 1; if( n > 1){ short (*fun)(int,int); if(flag){ fun = Com1; } else{ fun = Com2; } Qu[0].index = 0; Qu[0].values = AllData[0]; r = 0; QMaxHead = 0; if( k == 1){ put(AllData[0]); putchar(' '); } for( i = 1 ; i < n ; i ++ ){ if(Qu[QMaxHead].index < i - j){ QMaxHead ++; } while( fun(AllData[i],Qu[r].values) && r >= QMaxHead ){ r --; } r ++; Qu[r].values = AllData[i]; Qu[r].index = i; if(i >= j ){ put(Qu[QMaxHead].values); putchar(' '); } } } if( n == 1){ printf("%d",AllData[0]); } } int main(void) { int i; scanf("%d %d",&n,&k); for( i = 0 ; i < n ; i ++ ){ AllData[i] = Rint(); } ShowValues(0); putchar('\n'); ShowValues(1); putchar('\n'); return 0; }