青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

poj 2823 Sliding Window 單調隊列

   這道題的意思是給定一個長N的整數序列,用一個大小為K的窗口從頭開始覆蓋,問第1-第N-K次窗口里面最大的數字和最小的數字。
   剛開始還以為優先級隊列可以做,發現無法刪除最前面的元素。估計用線段樹這個題也是可以解得。用這個題學了下單調隊列。
   
   單調隊列正如其名,是一個從小到大排序的隊列,而且能夠保證所有的元素入隊列一次出隊列一次,所以平攤到每個元素的復雜度
就是O(1)。
   對于這個題單調隊列的使用。以序列1 3 -1 -3 5 3 6 7舉例。
   1)元素類型:一個結構體,包含數字大小和位置,比如(1,1),(3,2)。
   2)插入操作:從隊尾開始查找,把隊尾小于待插入元素的元素全部刪除,再加入待插入的元素。這個操作最壞的
情況下是O(n),但是我們采用聚集分析的方法,知道每個元素最多刪除一次,那么N個元素刪除N次,平攤到每一次
操作的復雜度就是O(1)了。
   3)刪除隊首元素:比如本文給的那個題,窗口一直往后移動,每一次移動都會刪除一個元素,所以很可能隊首會是要
刪除的元素,那么每次移動窗口的元素要進行一次檢查,如果隊首元素失效的話,就刪掉隊首元素。

   代碼的實現,我是包裝deque實現了一個模版類。速度很不好,居然跑了11s多才過,幸虧給了12s的時間,看status又500多ms
就過了的。估計數組實現會快很多。

   代碼如下:
#include <stdio.h>
#include <deque>
#include <algorithm>
using namespace std;
#define MAX_N (1000000 + 100)
int nNum[MAX_N];
int nN, nK;

struct Small
{
    int nValue;
    int nIndex;
    Small(int nV, int index):nValue(nV), nIndex(index) {}
    bool operator < (const Small& a) const
    {
        return nValue < a.nValue;
    }
};

struct Big
{
    int nValue;
    int nIndex;
    Big(int nV, int index):nValue(nV), nIndex(index) {}
    bool operator < (const Big& a) const
    {
        return nValue > a.nValue;
    }
};

//單調隊列
template <typename T> class Monoque
{
    deque<T> dn;

public:
    void Insert(T node)
    {
        int nPos = dn.size() - 1;
        while (nPos >=0 && node < dn[nPos])
        {
            --nPos;
            dn.pop_back();
        }
        dn.push_back(node);
    }

    int Top()
    {
        return dn.front().nValue;
    }

    void Del(int nBeg, int nEnd)
    {
        if (dn.size() > 0)
        {
            if (dn.front().nIndex < nBeg || dn.front().nIndex > nEnd)
            {
                dn.pop_front();
            }
        }
    }
};

int main()
{
    while (scanf("%d%d", &nN, &nK) == 2)
    {
        int i;
        for (i = 0; i < nN; ++i)
        {
            scanf("%d", &nNum[i]);
        }
        Monoque<Small> minQ;
        Monoque<Big> maxQ;

        for (i = 0; i < nK; ++i)
        {
            minQ.Insert(Small(nNum[i], i));
        }

        for (i = 0; i < nN - nK; ++i)
        {
            printf("%d ", minQ.Top());
            minQ.Insert(Small(nNum[i + nK], i + nK));
            minQ.Del(i + 1, i + nK);
        }
        printf("%d\n", minQ.Top());

        for (i = 0; i < nK; ++i)
        {
            maxQ.Insert(Big(nNum[i], i));
        }

        for (i = 0; i < nN - nK; ++i)
        {
            printf("%d ", maxQ.Top());
            maxQ.Insert(Big(nNum[i + nK], i + nK));
            maxQ.Del(i + 1, i + nK);
        }
        printf("%d\n", maxQ.Top());
    }

    return 0;
}

posted on 2012-09-02 14:25 yx 閱讀(1717) 評論(2)  編輯 收藏 引用 所屬分類: 數據結構

評論

# re: poj 2823 Sliding Window 單調隊列 2012-09-04 09:16 畢達哥拉斯半圓

問個問題,如果窗口的長度變的,復雜度該如何分析呢?  回復  更多評論   

# re: poj 2823 Sliding Window 單調隊列 2012-09-04 16:48 遠行

@畢達哥拉斯半圓
總的應該還是O(n),還是用聚集分析的方法,所有元素就入一次隊列,
最多出一次隊列,平攤到每個元素就是O(1)  回復  更多評論   

<2025年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

導航

統計

公告

常用鏈接

留言簿(3)

隨筆分類

隨筆檔案

me

好友

同學

網友

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产精品男gay被猛男狂揉视频| 亚洲精品看片| 亚洲福利久久| 亚洲人成在线播放| 一区二区三区欧美亚洲| 亚洲视频在线一区| 欧美在线一二三四区| 久久精品视频在线看| 欧美激情中文字幕一区二区| 国产精品久久| 亚洲国内精品在线| 先锋影音久久| 亚洲人成网站999久久久综合| 亚洲香蕉伊综合在人在线视看| 欧美一区二区三区在线观看视频 | 欧美激情二区三区| 亚洲免费视频一区二区| 欧美.日韩.国产.一区.二区| 国产欧美亚洲日本| 99re8这里有精品热视频免费| 久久九九久久九九| 亚洲美女一区| 久久国产高清| 国产精品久久久亚洲一区| 亚洲国产精品精华液2区45| 亚洲免费伊人电影在线观看av| 欧美国产日韩一区二区三区| 亚洲伊人色欲综合网| 美女久久一区| 亚洲国产日韩欧美在线图片 | 一本综合久久| 日韩亚洲欧美一区二区三区| 久久久久久久国产| 黑人巨大精品欧美黑白配亚洲| 亚洲欧美日韩在线播放| 99精品国产在热久久婷婷| 欧美激情网站在线观看| 亚洲人成在线免费观看| 免播放器亚洲一区| 久久久久久97三级| 国产综合精品一区| 欧美v亚洲v综合ⅴ国产v| 久久精品99| 亚洲国产精品久久久久久女王| 欧美www视频| 欧美黄色日本| 亚洲一区日韩在线| 亚洲综合日韩在线| 在线精品国产成人综合| 媚黑女一区二区| 欧美日韩午夜剧场| 亚洲欧美综合精品久久成人| 久久国产99| 在线中文字幕一区| 亚洲伊人伊色伊影伊综合网| 一区二区三区我不卡| 最新亚洲视频| 国产日韩欧美日韩| 亚洲人成小说网站色在线| 国产精品日韩专区| 亚洲第一精品在线| 国产欧美日韩亚洲| 亚洲精品久久久久久久久久久| 国产欧美在线观看| 亚洲人成在线播放| 在线日韩精品视频| 亚洲欧美日韩区| 99国产精品国产精品久久| 欧美亚洲在线| 欧美一区二区黄色| 欧美午夜性色大片在线观看| 欧美成人免费网站| 韩日在线一区| 欧美一区二区国产| 久久国产66| 国产精品综合久久久| 一区二区三区久久精品| 一本色道久久综合亚洲二区三区| 麻豆精品一区二区综合av| 久久久久久亚洲精品中文字幕| 国产精品亚洲综合久久| 在线视频欧美一区| 亚洲少妇中出一区| 欧美天堂亚洲电影院在线观看 | 欧美在线免费观看亚洲| 国产区精品在线观看| 小黄鸭精品密入口导航| 久久激情网站| 在线观看91精品国产麻豆| 久久婷婷蜜乳一本欲蜜臀| 免费毛片一区二区三区久久久| 亚洲国产精品成人综合色在线婷婷 | 国产精品大片免费观看| 久久久99免费视频| 国产农村妇女精品一区二区| 欧美成人综合| 午夜精品福利一区二区三区av| 香蕉国产精品偷在线观看不卡| 国产日韩综合一区二区性色av| 欧美一区三区三区高中清蜜桃| 久热这里只精品99re8久| 亚洲激情专区| 欧美午夜无遮挡| 欧美在线观看一区二区| 欧美一区二区三区四区视频| 亚洲第一精品在线| 国模套图日韩精品一区二区| 欧美另类视频| 欧美国产欧美亚洲国产日韩mv天天看完整 | 99在线精品视频| 亚洲精品欧美| 欧美成人激情视频| 欧美freesex8一10精品| 欧美激情小视频| 欧美成人在线免费视频| 嫩草伊人久久精品少妇av杨幂| 久久黄色小说| 久久一日本道色综合久久| 欧美在线免费视屏| 久久视频在线看| 久久久免费精品视频| 久久影院亚洲| 欧美日韩大片| 国产精品高潮久久| 国产精品视区| 国产一区二区三区精品久久久| 国产三级欧美三级| 国产一区二区三区四区老人 | 国产精品久久久久久久app| 欧美午夜一区二区三区免费大片| 欧美日本不卡| 国产美女精品免费电影| 国产一区二区久久久| 亚洲精品久久久久| 欧美亚洲免费电影| 亚洲人成绝费网站色www| 亚洲欧美国产77777| 欧美r片在线| 国产精品日韩一区| 国产在线视频不卡二| 国产精品成人一区二区艾草| 国产精品乱看| 亚洲大黄网站| 亚洲一区二区三区在线播放| 久久爱另类一区二区小说| 免费久久99精品国产自| av不卡在线看| 久久夜色精品国产亚洲aⅴ| 欧美精品日韩一区| 国产精品户外野外| 在线观看亚洲视频| 亚洲一卡久久| 欧美黄色一级视频| 香港成人在线视频| 欧美精品不卡| 怡红院精品视频| 亚洲免费小视频| 欧美高清成人| 欧美资源在线| 国产精品久久久久av免费| 亚洲国产精品一区二区久| 午夜欧美不卡精品aaaaa| 亚洲国产高清视频| 欧美成人有码| 亚洲国产日韩精品| 免费欧美日韩| 久久aⅴ国产欧美74aaa| 国产精品久久久久国产a级| 一区二区三区精品国产| 亚洲激情视频| 欧美激情在线狂野欧美精品| 亚洲一区二区网站| 国产精品国产三级国产专区53| 一本一道久久综合狠狠老精东影业| 你懂的网址国产 欧美| 久久久久久成人| 亚洲精品久久久蜜桃| 亚洲黑丝一区二区| 欧美精品在线免费观看| 亚洲伦理在线免费看| 日韩亚洲国产精品| 国产欧美日韩亚洲精品| 欧美专区日韩专区| 久久激情婷婷| 亚洲片国产一区一级在线观看| 亚洲日本视频| 国产美女精品| 亚洲国产激情| 国产亚洲精品久久久久婷婷瑜伽| 久久久夜夜夜| 欧美日韩国产精品一区| 午夜精品久久久久久久| 久久免费少妇高潮久久精品99| 亚洲欧洲精品成人久久奇米网| 一本色道88久久加勒比精品| 黄色成人小视频| 9久re热视频在线精品| 国产色综合久久| 一区二区三区视频在线观看| 韩日欧美一区二区三区|