洛谷 P1440 单调队列

维护一个递增的队列,每次队首进,队尾出,取队尾元素(下标相差在m之内的)

#include 
#include 
#include 
#include 
#include 
using namespace std;
typedef long long LL;

const int maxn=2000005;

struct node{
    int v,id;
}a[maxn];
int ans[maxn];
int n,m;
dequedq;

int main(){
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++){
        scanf("%d",&a[i].v);
        a[i].id=i;
    }
    ans[1]=0;
    for(int i=2;i<=n;i++){
        while(!dq.empty()&&dq.front().v>=a[i-1].v){
            dq.pop_front();
        }
        dq.push_front(a[i-1]);
        while(dq.back().idfor(int i=1;i<=n;i++){
        printf("%d\n",ans[i]);
    }
    return 0;
}

你可能感兴趣的:(洛谷 P1440 单调队列)