Ural 1126. Magnetic Storms

給定一個數組,求M連續的和的最大值。用到的數據結構是單調隊列。

#include <cstdio>
#include <deque>
using namespace std;
struct Node                    
{
    int value, index;
};                        //存儲每個元素的數值和下標
int main()
{
    int m;
    scanf("%d", &m);
    Node node;
    deque<Node> dqN;
    int num = 0;
    while (scanf("%d", &node.value) && node.value != -1)
    {
        node.index = num++;
        while (!dqN.empty() && dqN.front().index < num - m) 
            dqN.pop_front();
        while (!dqN.empty() && dqN.back().value < node.value)
            dqN.pop_back();
        dqN.push_back(node);
        if (num >= m)                                         //超出限定的m輸出隊首元素
            printf("%d\n", dqN.front().value);
    }
    system("pause");
    return 0;
}


發佈了202 篇原創文章 · 獲贊 6 · 訪問量 23萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章