单调队列入门, 单调队列与单调栈都很有意思啊。。。我喜欢 C++能过 #include <cstdio> using namespace std; const int MAX = 10000100; int data[MAX]; int min[MAX]; int max[MAX]; int queue[MAX]; int qbegin,qend,n,k; void findmin() { qbegin = qend = 0 ; for( int i = 0 ; i != n ; ++i ) { while( qbegin != qend && data[ queue[ qend - 1 ] ] >= data[ i ] ) --qend; queue[ qend ++ ] = i; while( qbegin != qend && queue[ qbegin ] < i - k + 1 ) ++qbegin; min[ i ] = data[ queue[ qbegin ] ]; } } void findmax() { qbegin = qend = 0 ; for( int i = 0 ; i != n ; ++i ) { while( qbegin != qend && data[ queue[ qend - 1 ] ] <= data[ i ] ) --qend; queue[ qend ++ ] = i; while( qbegin != qend && queue[ qbegin ] < i - k + 1 ) ++qbegin; max[ i ] = data[ queue[ qbegin ] ]; } } int main() { scanf("%d%d",&n,&k); for( int i = 0 ; i != n ; ++i ) scanf("%d",&data[i]); findmin(); findmax(); printf("%d",min[k-1]); for( int i = k; i < n ; ++i ) printf(" %d",min[i]); printf("/n"); printf("%d",max[k-1]); for( int i = k; i < n ; ++i ) printf(" %d",max[i]); printf("/n"); return 0; }