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

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 閱讀(1708) 評論(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)  回復  更多評論   

<2011年11月>
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

導航

統計

公告

常用鏈接

留言簿(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>
            欧美日韩精品一区二区在线播放 | 亚洲韩日在线| 亚洲精品久久久久中文字幕欢迎你 | 亚洲免费在线观看视频| 欧美日韩视频一区二区| 亚洲欧洲一二三| 欧美激情按摩| 99综合在线| 久久激情五月丁香伊人| 亚洲少妇诱惑| 国产精品超碰97尤物18| 一区二区三区国产在线观看| 亚洲福利视频一区| 美女视频黄 久久| 亚洲黄一区二区| 欧美mv日韩mv国产网站app| 久久久五月天| 91久久在线播放| 亚洲精品综合精品自拍| 欧美视频一区二区在线观看| 亚洲一区三区电影在线观看| 一区二区国产日产| 国产精品久久久对白| 销魂美女一区二区三区视频在线| 亚洲一区在线观看免费观看电影高清| 国产精品久久久久999| 性做久久久久久| 欧美一区二区三区在线看| 好吊色欧美一区二区三区四区| 另类尿喷潮videofree| 欧美jizzhd精品欧美喷水| 99一区二区| 亚洲免费小视频| 黄网动漫久久久| 亚洲三级视频在线观看| 国产精品入口福利| 蜜臀av一级做a爰片久久| 欧美精品久久久久久久免费观看 | 欧美一区二区三区免费大片| 一区在线视频观看| 亚洲精品乱码| 国产日韩综合一区二区性色av| 美玉足脚交一区二区三区图片| 欧美成va人片在线观看| 西瓜成人精品人成网站| 久久久久免费视频| 国产精品99久久久久久久vr| 欧美在线精品一区| 99国产精品视频免费观看一公开| 亚洲欧美国产精品va在线观看| 影音先锋中文字幕一区| 99热精品在线观看| 在线免费观看日本一区| 宅男噜噜噜66一区二区66| 在线观看中文字幕不卡| 亚洲校园激情| 日韩视频精品在线| 久久se精品一区二区| 亚洲视频观看| 欧美大尺度在线| 久久蜜臀精品av| 国产精品久久久久aaaa九色| 亚洲电影有码| 黄网站免费久久| 亚洲欧美日韩国产综合| 欧美日韩成人综合天天影院| 国产日韩欧美综合精品| 最新亚洲一区| 亚洲第一在线| 欧美在线一级视频| 亚洲欧美日本精品| 欧美激情精品久久久久久大尺度 | 欧美福利影院| 国产亚洲一区二区三区| 一本久道久久综合中文字幕 | 这里只有视频精品| 亚洲精品激情| 美女主播精品视频一二三四| 久久综合久久综合久久综合| 国产精品有限公司| 一本色道久久综合一区 | 欧美激情精品久久久久久黑人| 国产夜色精品一区二区av| 亚洲一区二区不卡免费| 亚洲视频1区| 欧美日韩视频一区二区| 亚洲免费成人av电影| 亚洲最新合集| 欧美日韩精品系列| 日韩视频免费观看| 一区二区三区导航| 欧美日韩三级在线| 一区二区三区国产| 香港成人在线视频| 国产亚洲精品aa| 欧美一区二区三区四区高清 | 久久国产精品免费一区| 国产精品青草久久久久福利99| 一区二区三区高清在线| 性欧美精品高清| 国产色综合久久| 久久久久久日产精品| 牛牛影视久久网| 999在线观看精品免费不卡网站| 欧美精品18videos性欧美| 亚洲精品中文字幕女同| 亚洲一区中文| 国产酒店精品激情| 久久xxxx| 亚洲高清精品中出| 亚洲综合第一页| 国产在线精品一区二区中文 | 亚洲午夜精品一区二区三区他趣| 国产精品jvid在线观看蜜臀| 亚洲一区二区三区在线看| 午夜精品一区二区三区在线视| 国产日韩欧美综合| 嫩草成人www欧美| 亚洲最黄网站| 久久精品人人做人人综合 | 亚洲线精品一区二区三区八戒| 久久av一区二区三区| 亚洲激情社区| 国产精品视频自拍| 99pao成人国产永久免费视频| 国产精品日韩精品欧美在线| 亚洲欧美日韩天堂| 亚洲第一中文字幕在线观看| 亚洲天堂第二页| 国外成人在线| 欧美日韩免费在线观看| 久久久国产91| 一本一本久久a久久精品综合妖精 一本一本久久a久久精品综合麻豆 | 国产精品普通话对白| 久久深夜福利| 中文一区在线| 亚洲国产欧美一区| 欧美一区二区三区在线视频| 亚洲国产婷婷| 国产一区二区av| 欧美偷拍另类| 欧美成人蜜桃| 久久精品免费观看| 亚洲一区二区三区四区五区黄| 免费观看日韩av| 欧美一区二区三区四区在线观看地址| 亚洲人www| 韩国成人精品a∨在线观看| 国产精品成人一区二区艾草| 免费观看亚洲视频大全| 午夜精品久久久| 一本一本久久| 亚洲精品一区在线观看香蕉| 美日韩丰满少妇在线观看| 久久国产成人| 欧美一乱一性一交一视频| 一本色道久久88亚洲综合88| 在线观看免费视频综合| 国产亚洲欧美一区二区三区| 国产精品激情| 欧美日韩在线三区| 欧美精品一区在线观看| 欧美国产精品专区| 欧美大成色www永久网站婷| 久久香蕉国产线看观看网| 欧美一级在线亚洲天堂| 亚洲欧美日韩精品在线| 午夜精品国产精品大乳美女| 亚洲女优在线| 亚洲欧美日韩一区在线| 亚洲一区二区免费在线| 亚洲深夜福利视频| 亚洲午夜三级在线| 亚洲女女做受ⅹxx高潮| 亚洲尤物视频网| 欧美亚洲免费| 久久国产精品一区二区三区| 欧美在线影院在线视频| 久久精品国产96久久久香蕉| 久久国产精品网站| 久久青草久久| 欧美国产日韩亚洲一区| 欧美精品激情在线观看| 欧美日韩在线视频一区二区| 欧美天堂在线观看| 国产精品九九久久久久久久| 国产精品午夜视频| 国产一区二区三区四区| 在线成人激情视频| 亚洲三级视频在线观看| 中日韩男男gay无套| 午夜精品久久久久久久久| 久久精品二区亚洲w码| 蜜乳av另类精品一区二区| 亚洲第一免费播放区| 日韩亚洲欧美精品| 国内伊人久久久久久网站视频| 国产欧美一区二区在线观看| 国产欧美亚洲精品| 亚洲成色777777在线观看影院|