HDU 3415 Max Sum of Max-K-sub-sequence(长度不超过k的最大连续子序列和,单调队列)
来源:互联网 发布:淘宝退款卖家拒绝几次 编辑:程序博客网 时间:2024/05/22 00:29
题目链接:
HDU 3415 Max Sum of Max-K-sub-sequence
题意:
给
数据范围:
分析:
因为考虑首尾相连,所以我们把
#include <stdio.h>#include <string.h>#include <algorithm>#include <math.h>#include <climits>using namespace std;typedef long long ll;const int MAX_N = 100010 * 2;int T, n, k, head, tail, st, ed;ll data[MAX_N], sum[MAX_N]; int que[MAX_N];int main(){ scanf("%d", &T); while (T--) { scanf("%d%d", &n, &k); sum[0] = 0; for (int i = 1; i <= n; ++i) { scanf("%lld", &data[i]); data[i + n] = data[i]; } ll ans = data[1], tmp; st = 1, ed = 1; for (int i = 1; i <= 2 * n; ++i) { sum[i] = sum[i - 1] + data[i]; if (i <= k) { if (sum[i] > ans) { ans = sum[i], ed = i; } } } // 维护单调递增队列,存前缀和 head = tail = 0; que[tail++] = 1; for (int i = 2; i <= n + k; ++i) { // 剔除在i之前距离超过k的前缀和 while (head != tail && i - que[head] > k) { ++head; } // 剔除在i之前前缀和大的前缀和 while (head != tail && sum[i] <= sum[que[tail - 1]]) { --tail; } int flag = -1; if (i <= k && sum[que[head]] >= 0) { tmp = sum[i], flag = 1; } else if (head == tail) { tmp = data[i], flag = 2; } else { tmp = sum[i] - sum[que[head]]; flag = 3; } if (tmp > ans) { ans = tmp; if (flag == 1) st = 1; else if (flag == 2) st = i; else st = que[head] + 1; ed = i; } que[tail++] = i; //printf("i = %d ans = %d:\n", i, ans); /* for (int j = head; j < tail; ++j) { printf("%d ", sum[que[j]]); } printf("\n"); */ } if (st > n) st -= n; if (ed > n) ed -= n; printf("%lld %d %d\n", ans, st, ed); } return 0;}
0 0
- HDU 3415 Max Sum of Max-K-sub-sequence(长度不超过k的最大连续子序列和,单调队列)
- HDU 3415 Max Sum of Max-K-sub-sequence(单调队列+最大连续子串和)
- HDU 3415 Max Sum of Max-K-sub-sequence(求长度不超过K的最大区间和)
- 【hdu3415】【单调队列 】Max Sum of Max-K-sub-sequence【求长度不大于k的区间最大子串和】
- HDU Max Sum of Max-K-sub-sequence(单调队列)
- 单调队列的一个应用——求解连续区间最大值(HDU Max Sum of Max-K-sub-sequence)
- hdu 3415 Max Sum of Max-K-sub-sequence【单调队列】
- HDU 3415 Max Sum of Max-K-sub-sequence(单调队列)
- HDU 3415 Max Sum of Max-K-sub-sequence(单调队列)
- hdu 3415 Max Sum of Max-K-sub-sequence(单调队列)
- HDU 3415 Max Sum of Max-K-sub-sequence[单调队列优化dp]
- 【单调队列】hdu 3415 Max Sum of Max-K-sub-sequence
- hdu 3415 Max Sum of Max-K-sub-sequence 单调队列dp
- HDU 3415(Max Sum of Max-K-sub-sequence-单调队列优化DP)
- hdu 3415 Max Sum of Max-K-sub-sequence (单调队列)
- HDU--杭电--3415--Max Sum of Max-K-sub-sequence--暴力或单调队列
- HDU 3415 Max Sum of Max-K-sub-sequence【单调队列】
- HDU--3415--Max Sum of Max-K-sub-sequence--单调队列
- 大图加载+软引用+LruCache
- 【Codeforces自我陶醉水题篇~】(差17C code....)
- 算法+数据结构的本质
- Hust oj 1795 发现王国之旅(最大生成树)
- VB几种函数参数传递方法,Variant,数组,Optional,ParamArray
- HDU 3415 Max Sum of Max-K-sub-sequence(长度不超过k的最大连续子序列和,单调队列)
- 虚拟机类加载机制
- TCP/IP TIME_WAIT状态原理
- Android的软件盘在在点击“enter键”后有事件响应
- Codeforces 348A:Mafia(二分+思维)
- HDU2147之打表找规则
- MySQL结构优化技术之:掌控数据的结构
- 104. Maximum Depth of Binary Tree
- 关于WordPress的一些学习方法