モノトーンは------ウィンドウをスライディング小さなノートをキューイング

いくつかのナンセンス:

記念ヒンずっと前gellygoat首長がキューの単調さをオフに移動した後、決して巣に私たちに語りました

9S一度コンピュータコンパイルqbxt +ヒトデあり

素敵でf10キー

タイトル転送

データは、ツリーラインカードに目を通すことができますか?

この質問はもちろんのモノトーンボードキューの問題で、単調なキューです

ここでは、あまりにも、私たちは2つのモノトーンキューを設定(dalaoは1ですが、私はdalaoないよ、2つだけ)

それは単調なキューであるので、要素内のキューが単調でなければなりません。しかし、注意しない単調キュープライオリティキューも

実際にモノトーンキュー両端キュー

最初のステッカーは、共通の機能を両端キュー

挿入:

チームのヘッドから挿入:q.push_front();

尾から挿入:q.push_back();

キューの前に要素のXダブルエンドインサート要素:イテレータが挿入(イテレータit、のconst T&x)は、

(それをイテレータ、整数nは、CONST T&X)ボイドインサート:両端キューnは同一の要素は、要素Xの前に増加します

削除:

要素のチームヘッドの削除:q.pop_front()

チームの最後の削除要素:q.pop_back()

キューが空である:q.clear()

要素を削除するには、次のイテレータの消去を(それをイテレータ)

より多くの使用を参照してくださいここに

例えば、キュ​​ーが良いの最小値を維持してください

当社の保守チームは、最小範囲の現在のヘッドです。

現在のインデックスは、現在キューの最初の数(スライダー現在の左端)よりも小さい場合は、それが引退し、オフポップ(空でないキューのことに注意してください)することを示しています

我々は尾から新しい番号を挿入します。[X](の数を挿入するために)大きい場合、尾のこの時間添え字番号[x]は、以前無効よりも、より尾比X現在の数よりも小さくなければなりません。この光の中で見ると、チームの現在の数は、候補者の最小数の終わりにはできませんので、私たちが飛び出し、それを呼び出します

上記の二つのポップ後、それが[X]の尾部にあってもよいです

どのようなコードのバーの詳細を参照してください。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<queue>
#include<stack>
#include<set>
#include<map>
#include<vector>
using namespace std;
inline int read()
{
    char ch=getchar();
    int x=0;bool f=0;
    while(ch<'0'||ch>'9')
    {
        if(ch=='-')f=1;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9')
    {
        x=(x<<1)+(x<<3)+(ch^48);
        ch=getchar();
    }
    return f?-x:x;
}
int now,n,k,a[1000009],mi[1000009],ma[1000009],cnt;
struct dl{
    int xb,zhi;//队列是结构体类型,记录下标和数的值
    dl(int xx,int yy):xb(xx),zhi(yy){}//构造函数
};
deque<dl> qma,qmi;//qma维护最大值,qmi维护最小值
void pshmax(int x)
{
    while(!qma.empty()&&qma.front().xb<now) qma.pop_front();//注意队列非空(RE警告)
    while(!qma.empty()&&qma.back().zhi<a[x])qma.pop_back();
    qma.push_back(dl(x,a[x]));

}
void pshmin(int x)
{
    while(!qmi.empty()&&qmi.front().xb<now) qmi.pop_front();
    while(!qmi.empty()&&qmi.back().zhi>a[x])qmi.pop_back();
    qmi.push_back(dl(x,a[x]));
   
}
void luangao()
{
    for(now=2;now+k-1<=n;now++)//加的是k-1啊k-1
    {
        pshmin(now+k-1);pshmax(now+k-1);
        mi[++cnt]=qmi.front().zhi;
        ma[cnt]=qma.front().zhi;
    }
}
int main()
{
    n=read();k=read();
    for(int i=1;i<=n;i++)
     a[i]=read();
    qma.push_back(dl(1,a[1]));
    qmi.push_back(dl(1,a[1]));
    for(int i=2;i<=k;i++)//先手动处理[1,k]这个区间
     {
         pshmax(i);
        pshmin(i);
     }
     ma[1]=qma.front().zhi;
     mi[1]=qmi.front().zhi;
     cnt=1;
    luangao();
    for(int i=1;i<=cnt;i++)
     printf("%d ",mi[i]);
    printf("\n");
    for(int i=1;i<=cnt;i++)
     printf("%d ",ma[i]); 
}

 

おすすめ

転載: www.cnblogs.com/lcez56jsy/p/11311629.html