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

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)  回復  更多評論   

<2012年3月>
26272829123
45678910
11121314151617
18192021222324
25262728293031
1234567

導航

統計

公告

常用鏈接

留言簿(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国产一区二区三精品乱码| 亚洲在线不卡| 亚洲激情视频在线| 欧美性事免费在线观看| 国产精品人人做人人爽人人添| 国产精品一香蕉国产线看观看 | 久久精品卡一| 欧美sm视频| 欧美色精品天天在线观看视频| 国产欧美大片| 99精品国产99久久久久久福利| 先锋资源久久| 亚洲国产福利在线| 亚洲欧美一区在线| 欧美激情综合五月色丁香| 国产精品综合| 一区二区三区精品视频| 老巨人导航500精品| 亚洲美女诱惑| 久久亚洲不卡| 国产亚洲精品激情久久| aa日韩免费精品视频一| 久久久久久久久久看片| 一本一本久久| 男人的天堂亚洲在线| 国产情人节一区| 一区二区三区**美女毛片| 免费av成人在线| 欧美一区二区三区电影在线观看| 欧美日韩国产成人精品| 亚洲国产毛片完整版| 久久精品中文| 午夜精品福利视频| 国产精品人成在线观看免费| 亚洲精品国产精品乱码不99按摩| 久久久.com| 亚洲欧美一区二区三区久久| 欧美视频国产精品| 夜夜嗨av一区二区三区网页| 美女视频黄a大片欧美| 欧美亚洲在线观看| 国产乱码精品一区二区三区五月婷 | 亚洲第一福利在线观看| 久久精品一区二区三区四区| 亚洲一区二区三区四区五区午夜 | 狼狼综合久久久久综合网| 欧美亚洲色图校园春色| 国产热re99久久6国产精品| 午夜性色一区二区三区免费视频 | 性色一区二区| 国产区在线观看成人精品| 久久国产精品久久久久久| 性色av一区二区怡红| 校园春色综合网| 亚洲免费在线电影| 国产美女扒开尿口久久久| 欧美诱惑福利视频| 欧美在线影院| 亚洲国产精品成人一区二区| 欧美大片va欧美在线播放| 蜜臀av国产精品久久久久| 亚洲精品一区久久久久久| 亚洲精品乱码久久久久久久久 | 亚洲精选在线观看| 欧美视频不卡中文| 欧美影视一区| 久久久人成影片一区二区三区观看 | 久久精品噜噜噜成人av农村| 一区二区三区在线高清| 亚洲国产mv| 国产精品家庭影院| 久久综合色8888| 欧美日韩精品一区视频| 亚洲欧美综合| 理论片一区二区在线| 亚洲午夜电影网| 久久成人精品视频| 日韩一级成人av| 午夜精品久久久久久久男人的天堂 | 99精品国产热久久91蜜凸| 国产精品久久久久久av下载红粉| 久久爱91午夜羞羞| 欧美成人中文字幕| 欧美一区1区三区3区公司| 狂野欧美性猛交xxxx巴西| 亚洲综合国产| 美女日韩欧美| 午夜老司机精品| 欧美风情在线观看| 久久久久久久久久久久久女国产乱| 欧美激情第五页| 久久综合精品国产一区二区三区| 欧美啪啪成人vr| 久久夜色精品国产欧美乱| 欧美日韩免费在线| 美女网站久久| 国产乱子伦一区二区三区国色天香| 亚洲国产mv| 亚洲黄色成人| 久久se精品一区二区| 亚洲一区二区在线播放| 欧美a级大片| 欧美99久久| 国产专区精品视频| 亚洲欧美日韩精品久久久久| 亚洲肉体裸体xxxx137| 国产美女诱惑一区二区| 亚洲精品中文字幕在线| 亚洲国产欧美日韩| 久久精品电影| 久久精品国产2020观看福利| 国产精品magnet| 99国内精品| 一区二区av在线| 欧美高清免费| 91久久中文| 亚洲精品一区二区网址 | 欧美专区日韩专区| 亚洲在线成人| 欧美午夜精品久久久久久浪潮| 亚洲精品美女| 一区二区三区四区精品| 欧美精品一区二区三区蜜桃| 91久久嫩草影院一区二区| 亚洲精品久久| 欧美精品久久久久久久免费观看 | 亚洲欧美成人| 欧美在线日韩在线| 国产日韩欧美不卡| 欧美自拍丝袜亚洲| 久久综合精品一区| 91久久久久久| 欧美精品一区二区精品网| 亚洲人成毛片在线播放| 一区二区三欧美| 国产女主播视频一区二区| 欧美亚洲综合另类| 欧美a级片一区| 99在线视频精品| 国产精品免费一区二区三区在线观看| 亚洲一区激情| 久久亚洲免费| 亚洲精品在线观看免费| 欧美日韩三区四区| 午夜精品理论片| 欧美va天堂在线| 一区二区三区视频在线| 国产精品欧美一区二区三区奶水 | 99www免费人成精品| 午夜国产不卡在线观看视频| 国产日韩欧美中文| 美女免费视频一区| 亚洲一区二区三区午夜| 免费短视频成人日韩| av成人国产| 国产亚洲a∨片在线观看| 免费成人毛片| 亚洲综合精品一区二区| 男女激情久久| 午夜精品久久久99热福利| 狠狠爱综合网| 欧美日韩在线三区| 久久av一区二区三区亚洲| 亚洲精品日韩久久| 久久久九九九九| 日韩小视频在线观看专区| 国产精品一区在线观看你懂的| 麻豆九一精品爱看视频在线观看免费| 午夜精品理论片| 欧美专区18| 欧美激情亚洲激情| 久久色在线播放| 国产精品永久免费在线| 亚洲精品视频在线播放| 亚洲国产成人午夜在线一区| 欧美亚洲三区| 久久国产精品久久精品国产 | 久久亚洲影音av资源网| 欧美视频在线观看视频极品 | 久久国产精品久久久久久| 欧美激情久久久久久| 欧美a级大片| 亚洲福利专区| 欧美国产日本在线| 男人的天堂亚洲| 一区二区三区久久网| 欧美日韩中文在线观看| 午夜在线一区| 蜜桃久久av一区|