zoukankan      html  css  js  c++  java
  • poj-2823(单调队列)

    题意:给你长度位n的数组,问每个长度为m的段的最值;

    解题思路:这道题是单调队列的入门题;

    #include<iostream>
    #include<algorithm>
    #include<queue>
    #include<cstdio>
    #define maxn 1000100
    using namespace std;
    struct node
    {
        int val;
        int pos;
    }a[maxn];
    int que[maxn];
    int mn[maxn];
    int mx[maxn];
    int n,m;
    int s[maxn];
    void get_min()
    {
        int head=1,tail=0,i;
        for(i=1;i<m;i++)
        {
            while(head<=tail&&a[tail].val>=s[i])
                tail--;
            a[++tail].val=s[i];
            a[tail].pos=i;
        }
        for(;i<=n;i++)
        {
            while(head<=tail&&a[tail].val>=s[i])
                tail--;
            a[++tail].val=s[i];
            a[tail].pos=i;
            while(a[head].pos<i-m+1)
                head++;
            mn[i-m+1]=a[head].val;
        }
    }
    void get_max()
    {
        int head=1,tail=0,i;
        for(i=1;i<m;i++)
        {
            while(head<=tail&&a[tail].val<=s[i])
                tail--;
            a[++tail].val=s[i];
            a[tail].pos=i;
        }
        for(;i<=n;i++)
        {
            while(head<=tail&&a[tail].val<=s[i])
                tail--;
            a[++tail].val=s[i];
            a[tail].pos=i;
            while(a[head].pos<i-m+1)
                head++;
            mx[i-m+1]=a[head].val;
        }
    }
    int main()
    {
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++)
            scanf("%d",&s[i]);
        get_max();
        get_min();
        for(int i=1;i<=n-m+1;i++)
            printf("%d ",mn[i]);
        printf("
    ");
        for(int i=1;i<=n-m+1;i++)
            printf("%d ",mx[i]);
        printf("
    ");
        return 0;
    }
    

      

  • 相关阅读:
    洛谷P2146 [NOI2015]软件包管理器
    洛谷P3038 [USACO11DEC]牧草种植Grass Planting
    洛谷P2831 愤怒的小鸟
    洛谷P1084 疫情控制
    洛谷P3258 [JLOI]2014松鼠的新家
    洛谷P1084 运输计划
    洛谷P2051 [AHOI2009]中国象棋
    洛谷P1438 无聊的数列
    洛谷P1312 Mayan游戏
    luogu P1038 神经网络
  • 原文地址:https://www.cnblogs.com/huangdao/p/8999433.html
Copyright © 2011-2022 走看看