hdu3415 Max Sum of Max-K-sub-sequence
2013-06-06 23:43
232 查看
我的第一道单调队列题目,之前有看过这道题的题解,并简单了解了单调队列,本以为自己能独立写出来,战战兢兢写完,一调试果然是错的,找到了原因还是不知道该如何解决,无奈再看题解,队列里存的是数组下标,我存的是元素自身,这样就不能维护子序列的长度,显然是错的。
总结:菜鸟智力是硬伤,还有很长的路要走。
总结:菜鸟智力是硬伤,还有很长的路要走。
#include<iostream> #include<cstring> #include<cstdio> using namespace std; int sum[2*100010],list[2*100010],a[100010]; int main(){ int t,n,k; int i; scanf("%d",&t); while(t--){ memset(sum,0,sizeof(sum)); memset(list,0,sizeof(list)); scanf("%d%d",&n,&k); for(i=1;i<=n;i++){ scanf("%d",&a[i]); sum[i]+=sum[i-1]+a[i]; } for(i=n+1;i<=n+k;i++) sum[i]+=sum[i-1]+a[i-n]; int front=0,rear=0; int ans=-0x3fffffff; int st,en; for(i=1;i<=n+k;i++){ while(front<rear&&sum[list[rear-1]]>sum[i-1]) rear--; list[rear++]=i-1; while(front<rear&&i-list[front]>k) front++; if(ans<sum[i]-sum[list[front]]){ ans=sum[i]-sum[list[front]]; st=list[front]+1; en=i; } } if(st>n) st-=n; if(en>n) en-=n; printf("%d %d %d\n",ans,st,en); } return 0; }
相关文章推荐
- hdu3415 Max Sum of Max-K-sub-sequence
- HDU3415:Max Sum of Max-K-sub-sequence(单调队列)
- 【hdu3415】【单调队列 】Max Sum of Max-K-sub-sequence【求长度不大于k的区间最大子串和】
- hdu3415 Max Sum of Max-K-sub-sequence(单调队列求n个数中和的最大值)
- hdu3415 Max Sum of Max-K-sub-sequence
- 【HDU3415】Max Sum of Max-K-sub-sequence,思路+解题报告+AC代码+自虐般疯狂吐槽【0.3%达成!】
- HDU3415 Max Sum of Max-K-sub-sequence
- hdu3415 Max Sum of Max-K-sub-sequence
- hdu3415 Max Sum of Max-K-sub-sequence
- 【DP+单调队列】 hdu3415 Max Sum of Max-K-sub-sequence
- HDU3415 - Max Sum of Max-K-sub-sequence - 单调队列
- hdu3415 Max Sum of Max-K-sub-sequence 单调队列
- HDU3415:Max Sum of Max-K-sub-sequence(单调队列)
- hdu3415 Max Sum of Max-K-sub-sequence 单调队列
- HDU3415 Max Sum of Max-K-sub-sequence (DP+单调队列)
- hdu3415 Max Sum of Max-K-sub-sequence 单调队列
- hdu 3415 Max Sum of Max-K-sub-sequence(单调队列)
- DP单调队列: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