hdu 3415

来源:互联网 发布:数据挖掘就业前景 编辑:程序博客网 时间:2024/03/28 20:57

单调队列

参考资料:http://wenku.baidu.com/view/432e4c2ce2bd960590c677c6.html

第一次写,粗心地把最后输出语句的%n写成了%k,搞了好久

#include "stdio.h"#define M 100010typedef struct _Node{int val;int pos;}Node, *pNode;Node que[M<<1];int fro, end;int num[M], sum[M<<1];void main(){int c, i, j;int n, k;int mm, s, e;freopen("in.txt", "r", stdin);scanf("%d", &c);while(c--){scanf("%d %d", &n, &k);sum[0] = 0;for(i=1; i<=n; i++){scanf("%d", num+i);sum[i] = sum[i-1] + num[i];}for(i--, j=1; j<k; j++) sum[i+j] = sum[i+j-1] + num[j];que[0].val = 0; que[0].pos = 0;fro = 0; end = 1;mm = 0x80000000;for(i=1; i<n+k; i++){while(fro<end && que[fro].pos<i-k){fro++;}if(mm < sum[i]-que[fro].val){mm = sum[i]-que[fro].val;s = que[fro].pos+1;e = i;}while(fro<end && sum[i]<que[end-1].val){end--;}que[end].val = sum[i];que[end].pos = i;end++;}printf("%d %d %d\n", mm, s, e>n?(e%n):e);}}