给定一个数组,求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;
}