hdu3415 单调队列
来源:互联网 发布:java绘图教程 编辑:程序博客网 时间:2024/05/24 05:43
单调队列,最近状态不好啊。。省赛了,要加油。。
单调队列,这题先将数组转换为前N项和的形式,然后遍历一遍,求a[k-i]即k到i的最大值,其中,控制i的范围。。。
然后单调队列从一开始判断,保持队头为最小值,然后加上判断语句,若i-s【top】>k 队头退队即可。
代码:
#include<iostream>#include<cstdio>#include<cstring>using namespace std;int a[200020],b[200020],s[200020];int main(){ int T; cin>>T; while(T--) { int n,m; scanf("%d%d",&n,&m); a[0]=0; for(int i=1;i<=n;i++) { scanf("%d",&a[i]); b[i]=a[i]; a[i]=a[i]+a[i-1]; } for(int i=n+1;i<=n+m;i++) { a[i]=b[i-n]+a[i-1]; } int ans=-1<<30; int r,l;r=1;l=1; int top=0;int tail=0;int last=0; for(int k=1;k<=n+m;k++) //(i,k) { while(top<tail&&a[s[tail-1]]>a[k-1]) tail--; s[tail++]=k-1; while(top<tail&&k-s[top]>m) top++; int tmp=a[k]-a[s[top]]; if(tmp>ans) { ans=tmp; r=k%n; l=(s[top]+1)%n; } } if(r==0)r=n; if(l==0)l=n; cout<<ans<<' '<<l<<' '<<r<<endl; } return 0;}
- HDU3415单调队列
- hdu3415 单调队列
- HDU3415单调队列
- hdu3415单调队列
- HDU3415【单调队列】
- HDU3415---单纯的单调队列
- hdu3415 单调队列求区间最大和
- 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(单调队列求n个数中和的最大值)
- HDU3415 Max Sum of Max-K-sub-sequence (DP+单调队列)
- #HDU3415#Max Sum of Max-K-sub-sequence(单调队列基础)
- HDU3415
- hdu3415
- HDU3415
- HDU3415
- [C# 线程处理系列]专题二:线程的详细使用
- 编译运行AspectJ自带的tracing示例
- 复习单链表的实现
- mongodb有关的研究
- 文件 I/O——实例1:open函数close函数lseek函数用法
- hdu3415 单调队列
- HDU-1856,并查集
- ssh整合之三(实现逻辑)
- C语言编译过程中的组成部分
- 大数的阶乘
- 线程二
- 【DFS】nyoj 488 素数环
- MongoDB从入门到提高【第二集】
- android利用剪切板来实现数据的传递 分类: android