給定一個數組,求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;
}