!-- Loading 底层遮罩 -->

单调队列

滑动窗口维护区间最大值:

    int  head  =  0 ,  tail  =  0 ;  
    for  ( int  i  =  1 ;  i  <=  n ;  i++ )
    {
        while  ( head  <  tail  &&  q [ head ]  +  k  <=  i )
            head++ ;
        while  ( head  <  tail  &&  arr [ q [ tail  -  1 ] ]  <  arr [ i ] )
            tail-- ;
        q [ tail++ ]  =  i ;
        if  ( i  >=  k )
            cout  <<  arr [ q [ head ] ]  <<  endl ;
    }

 

posted @ 2022-03-30 18:40  Thinker-X  阅读(20)  评论(0)    收藏  举报