题目链接:###

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. Client should know only resource URIs and that’s all.

    REST Principles and Architectural Constraints – REST API Tutorial https://restfulapi.net/rest-archit ...

  2. 移动web开发适配rem

    移动的meta标签 <meta  name="viewport" content="width=device-width, initial-scale=1,user ...

  3. td 中设置超出宽度显示省略号失效

    td测试内容超出显示省略号时,结果没有显示省略号,而是一直往后显示,且超出了td大小,强行挤大了table. 原因是因为td默认不换行. 解决方法: 1.强制td换行. IE加上word-break: ...

  4. 对 block 内存管理的一些看法

    首先交代一下retain cycle ,和 产生retain cycle后我们应该怎么处理. 1.retain cycle在block中是极易产生,block就是一段可以灵活使用的代码,你可以把它当做 ...

  5. (MySQL里的数据)通过Sqoop Import Hive 里 和 通过Sqoop Export Hive 里的数据到(MySQL)

    Sqoop 可以与Hive系统结合,实现数据的导入和导出,用户需要在 sqoop-env.sh 中添加HIVE_HOME的环境变量. 具体,见我的如下博客: hadoop2.6.0(单节点)下Sqoo ...

  6. ⭐驱动之module_init/module_exit与系统启动关系

    在前面helloworld的编写里面,我们使用了两个宏分别是module_init和module_exit,这里分析下为什么使用这两个宏. 在写模块的时候有两个特殊的函数,分别是init_module ...

  7. wukong引擎源码分析之索引——part 3 文档评分 无非就是将docid对应的fields信息存储起来,为搜索结果rank评分用

    之前的文章分析过,接受索引请求处理的代码在segmenter_worker.go里: func (engine *Engine) segmenterWorker() { for { request : ...

  8. LA-2678 (尺取法)

    题意: 在一个长度为n的序列中,找到最短的长度序列,使其和大于等于s; 思路: two pointer ,水题; Ac代码: #include <bits/stdc++.h> /* #in ...

  9. SPOJ:Ada and Orange Tree (LCA+Bitset)

    Ada the Ladybug lives near an orange tree. Instead of reading books, she investigates the oranges. T ...

  10. 「咕咕网校 - 基础省选」树上问题的进阶 by Drench

    一定要在noip之前把自己花钱买的Luogu网课梳理完!QAQ 树上前缀和: 对于有根树,在每个点记录 val (点权) 和 sum(到根的点权之和) 当然记录的值因题而异(但是既然叫树上前缀和当然就 ...