题目链接:###

WOJ1318

题目分析:###

首先我们要知道当这是一个线性的序列的时候应该怎么做:最大子序和

这里是线性的,就把数组复制两遍即可

好像有些细节要处理(也可能是我代码写丑了),具体的都在代码里,挺好理解的


代码:###

#include<bits/stdc++.h>
#define MAXN (100000+5)
using namespace std;
inline int read(){
int cnt=0,f=1;char c;
c=getchar();
while(!isdigit(c)){
if(c=='-')f=-f;
c=getchar();
}
while(isdigit(c)){
cnt=cnt*10+c-'0';
c=getchar();
}
return cnt*f;
}
int n,k,t,l=1,r=1,ans=-(1<<21);
int ansl,ansr;
int a[2*MAXN],sum[2*MAXN],q[2*MAXN],pos[2*MAXN],f[2*MAXN];
int main(){
t=read();
while(t--){
l=r=0;
q[0]=0;pos[0]=0;
ans=-(1<<30);
n=read();k=read();
for(register int i=1;i<=n;i++){
a[i]=a[i+n]=read();sum[i]=sum[i+n]=0;if(a[i]>ans){ans=a[i];ansl=ansr=i;}
}
for(register int i=1;i<=2*n;i++)sum[i]=sum[i-1]+a[i];
for(register int i=1;i<=2*n;i++){
int u=sum[i];
while(u<q[r]&&l<=r)r--;
q[++r]=u;pos[r]=i;
while((pos[l]<i-k||pos[l]<i-n)&&l<=r)l++;
int v=q[l];
if(l==r)continue;
if(u-v>ans){
ans=u-v;
ansl=pos[l]+1;ansr=i;
if(ansl>n)ansl-=n;
if(ansr>n)ansr-=n;
}
}
printf("%d %d %d\n",ans,ansl,ansr);
}
return 0;
}

[WOJ1318]和最大的更多相关文章

随机推荐

  1. Pycharm下运行程序查看每个变量的值的方法(类似于Spyder和MATLAB)

    昨天,用了大量篇幅讲了Spyder的各种问题,之所以要用Spyder,最重要的一个原因就是能够非常方便的查看中间变量的值.类似MATLAB的工作空间,非常方便.如下图所示: 但是Spyder的代码自动 ...

  2. POJ 2892 Tunnel Warfare(树状数组+二分)

    题目链接 二分求上界和下界,树状数组.注意特殊情况. #include <cstring> #include <cstdio> #include <string> ...

  3. java随记2

    1.Arrays java8里新添加了parallelSort等parallel开头的方法,表示利用cpu并行的能力 2.面向对象 如果继承树里的某个类要被初始化时,系统将会同时初始化该类的所有父类 ...

  4. 关于sh,bash和dash

    1 debian下shell脚本的执行过程 当sh xxx.sh,或则./xxx.sh时,默认是sh解释器来执行这个shell脚本的,但是sh是到bash的软连接,所以本质上还是bash来解析这she ...

  5. debian old version cd and distribution archives

    1 debian old version cd/dvd 官网的old version image,下载速度很慢 http://cdimage.debian.org/cdimage 下面这个靠谱,是镜像 ...

  6. 小程序登录方式切换 不做url跳转

    var filegUP = require('../../utils/getUserPassword.js'); var filemd5 = require('../../utils/md5.min. ...

  7. com.mongodb. org.mongodb.

  8. HDU 5627Clarke and MST

    Clarke and MST Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)To ...

  9. umask文件屏蔽字的使用【学习笔记】

    #include "apue.h" #include <fcntl.h> #define RWRWRW (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP ...

  10. Spring Boot2.0+Redis+Ehcache实现二级缓存

    EHCache 本地缓存 Redis 分布式缓存(可以共享) 一级 Redis 二级Ehcache    当redis挂了 有备胎 反之: 先走本地,本地没有再走网络  尽量少走Redis  效率会高 ...