您的位置:首页 > 其它

哈理工oj(acm.hrbust.edu.cn) 1522【单调队列】

2012-08-10 02:17 302 查看
View Code

#include<stdio.h>

const int MAXN = 100000 + 10;

class Node {
int s; //值。
int i; //下标。
public:
Node() {}
Node(int i, int s) : i(i), s(s) {}
~Node() {}
int visi() {return this->i;}
int viss() {return this->s;}
}que[MAXN];

int s[MAXN];

int main()
{
int n, m;
while(scanf("%d %d", &n, &m) != EOF) {

s[0] = 0;
for(int i = 1; i <= n; i++) {
scanf("%d", &s[i]);
s[i] += s[i-1];
}

int ans = s[1];
Node *fr = new Node; //队列头指针。
Node *ta = new Node; //队列尾指针。
fr = ta = que;
que[0] = Node(0, 0);

for(int i = 2; i <= n; i++) {
while(fr<=ta && (*fr).visi() < i-m) fr++;
while(fr<=ta && (*ta).viss() >= s[i-1]) ta--;
ta++;
*ta = Node(i-1, s[i-1]);
int t = s[i] - (*fr).viss();
if(ans < t) ans = t;
}
printf("%d\n",ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐