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

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 閱讀(1713) 評論(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>
            亚洲一区二区在线播放| 亚洲欧美视频| 欧美日韩久久不卡| 女生裸体视频一区二区三区| 欧美一区二区高清| 性欧美xxxx大乳国产app| 亚洲欧美综合精品久久成人| 在线亚洲高清视频| 亚洲天堂成人在线观看| 亚洲一区二区三区在线观看视频| 亚洲无线观看| 欧美中文字幕在线视频| 老司机免费视频一区二区| 欧美国产日韩精品| 夜夜嗨av一区二区三区网页| 亚洲综合日韩在线| 欧美v日韩v国产v| 国产精品不卡在线| 一区二区三区在线视频观看| 日韩亚洲欧美高清| 久久成人在线| 亚洲激情女人| 亚洲影院在线| 欧美激情精品久久久久久免费印度 | 亚洲日本中文字幕免费在线不卡| 日韩天堂av| 久久精品一区四区| 亚洲国产va精品久久久不卡综合| 一区二区三区蜜桃网| 久久在线免费观看| 国产精品视频你懂的| 亚洲精品国产品国语在线app| 欧美夜福利tv在线| 亚洲人妖在线| 开元免费观看欧美电视剧网站| 欧美日韩在线另类| 狠狠狠色丁香婷婷综合久久五月| 艳女tv在线观看国产一区| 久久蜜桃资源一区二区老牛| 亚洲免费不卡| 久久综合狠狠| 激情久久影院| 欧美一级视频精品观看| 日韩一区二区精品葵司在线| 美女视频黄 久久| 尹人成人综合网| 欧美一级久久久| 亚洲视频1区| 欧美视频网址| 99精品国产热久久91蜜凸| 欧美大片在线看免费观看| 久久aⅴ国产紧身牛仔裤| 国产欧美日韩免费看aⅴ视频| 亚洲综合日韩| 亚洲一区二区三区在线观看视频| 欧美日韩一区综合| 亚洲视频在线观看一区| 亚洲精品日韩综合观看成人91| 乱人伦精品视频在线观看| 国产精品一区二区三区久久久| 国内精品美女av在线播放| 欧美亚男人的天堂| 一个色综合导航| 亚洲人成在线播放网站岛国| 欧美国产欧美亚洲国产日韩mv天天看完整 | 欧美1区免费| 久久午夜电影| 一色屋精品视频在线看| 六月婷婷久久| 久久精品中文| 亚洲美女福利视频网站| 日韩亚洲视频在线| 国产精品视频专区| 久久精品国产第一区二区三区| 欧美一区亚洲| 亚洲成人影音| 99热在这里有精品免费| 国产精品久久久久9999高清| 久久电影一区| 毛片基地黄久久久久久天堂| 亚洲精品无人区| 一区二区欧美视频| 国产亚洲午夜| 亚洲大片av| 国产精品每日更新在线播放网址| 久热精品视频在线观看一区| 欧美经典一区二区| 午夜精品视频在线观看| 久久免费少妇高潮久久精品99| 亚洲精选中文字幕| 亚洲在线电影| 91久久久国产精品| 亚洲伊人久久综合| 最新成人在线| 亚洲午夜电影网| 亚洲国产日韩一区| 一区二区三区日韩欧美精品| 激情婷婷亚洲| 99国内精品| 亚洲大黄网站| 亚洲一区二区黄色| 悠悠资源网亚洲青| 一本色道久久综合亚洲精品小说| 国内伊人久久久久久网站视频| 亚洲黄色在线视频| 国产亚洲精品aa| 久久精品国产精品亚洲综合| 亚洲午夜视频| 欧美高清在线一区二区| 久久国产欧美精品| 欧美四级在线| 欧美二区不卡| 狠狠色综合色综合网络| 一区二区三区四区五区精品视频 | 国产精品一区二区在线观看网站 | 欧美成人免费大片| 欧美在线观看网站| 久久夜色精品亚洲噜噜国产mv| 欧美激情视频一区二区三区在线播放| 美女精品在线| 影音欧美亚洲| 欧美日韩国产三级| 性欧美video另类hd性玩具| 久久亚洲影院| 91久久在线播放| 亚洲视频在线二区| 精品福利电影| 亚洲一区精品在线| 亚洲美女黄色| 蘑菇福利视频一区播放| 久久久久成人精品| 国产美女一区二区| 夜夜精品视频| 宅男精品视频| 欧美视频在线不卡| 亚洲乱码国产乱码精品精| 亚洲片在线观看| 欧美成年人网| 亚洲国产天堂久久综合网| 玉米视频成人免费看| 久久久91精品国产| 欧美18av| 亚洲人午夜精品免费| 欧美成人有码| 亚洲精品在线免费观看视频| 999亚洲国产精| 欧美三日本三级少妇三2023 | 久久精品91久久香蕉加勒比| 午夜精品福利一区二区三区av| 国产精品yjizz| 性欧美videos另类喷潮| 久久蜜臀精品av| 亚洲欧洲在线看| 欧美日韩国产色综合一二三四 | 亚洲高清色综合| 免费成人av在线看| 亚洲精品综合| 久久精品视频在线播放| 激情综合网激情| 欧美二区在线看| 亚洲性夜色噜噜噜7777| 久久精品一区二区三区不卡| 亚洲高清视频在线| 欧美三级免费| 久久久久久久一区二区| 亚洲三级视频| 久久久精品欧美丰满| 亚洲激情av| 国产精品一区二区男女羞羞无遮挡 | 欧美日韩在线一区二区三区| 亚洲免费影院| 免费91麻豆精品国产自产在线观看| 在线观看亚洲视频啊啊啊啊| 免费观看成人网| 亚洲尤物视频网| 欧美阿v一级看视频| 亚洲欧美日本国产有色| 在线精品国产欧美| 国产精品久线观看视频| 开心色5月久久精品| 亚洲图片欧美一区| 欧美激情日韩| 欧美一区二区高清| 一区二区三区国产精华| 激情亚洲成人| 国产伦精品一区二区三区免费迷| 免费观看成人鲁鲁鲁鲁鲁视频| 亚洲系列中文字幕| 亚洲国产精品成人综合| 欧美一区二区大片| 亚洲系列中文字幕| 在线免费观看一区二区三区| 国产精品久久网| 欧美日韩不卡一区| 蘑菇福利视频一区播放| 久久久www成人免费精品| 亚洲欧美999| 亚洲性线免费观看视频成熟| 91久久午夜| 欧美激情五月|