首页 > 其他分享 >【tyvj1305】最大子序和(单调队列)

【tyvj1305】最大子序和(单调队列)

时间:2023-02-08 12:37:43浏览次数:42  
标签:tyvj1305 队列 cin long int maxn ans 序列 子序


problem

  • 给你一个长为n的序列
  • 求一个长不超过m的连续子段,使子段和最大

solution

  • 如果n<=10^3,我们很容易写出枚举(s是前缀和,区间[l,r]的和就是s[r]-s[l-1]。枚举l,r即可。
for(int i = 1; i <= m; i++)//枚举长度
for(int j = i; j <= n; j++)//枚举r
ans = max(ans, s[j]-s[j-i]);//可以算出l
  • 但是这里是10^5,,所以考虑进一步优化。
  • 如果右端点是i,那么就转为求一个左端点j属于[i-m,i-1]并且s[j]最小。并且j越靠近m一定是越优的(在后面更不容易超过m。
  • 所以选择集合一定是,“下标位置递增,对应前缀和s也递增”的序列,我们可以用队列保存这个序列。

codes

#include<iostream>
#include<algorithm>
#define maxn 300010
using namespace std;
int a[maxn], q[maxn];
long long s[maxn], ans;
int main(){
int n, m;
cin>>n>>m;
for(int i = 1; i <= n; i++){
cin>>a[i]; s[i]=s[i-1]+a[i];
}
int l = 1, r = 1;
q[l] = 0; //save j
for(int i = 1; i <= n; i++){
while(l<=r && q[l]<i-m)l++;
ans = max(ans, s[i]-s[q[l]]);
while(l<=r && s[q[r]]>s[i])r--;
q[++r] = i;
}
cout<<ans<<'\n';
return 0;
}


标签:tyvj1305,队列,cin,long,int,maxn,ans,序列,子序
From: https://blog.51cto.com/gwj1314/6044050

相关文章

  • 【POJ2259】Team Queue(队列,模拟)
    problem有n个小组,进行排队。当一个人来到队伍时,若队伍中有自己小组成员时,他就直接站到其后面如果没有,则站到队伍最后面,形成自己小组的第一个入队元素。出队列时,给出出队指令......
  • 阻塞式并发队列
    --BlockingQueue:阻塞式队列--可以实现生产者消费者模式 --LinkedBQ:链表实现    --ArrayBQ:数组实现,有限队列    --Delay......
  • OpenHarmony开发15 —— 消息队列
    OpenHarmony开发15——消息队列说点别的,这几天没更新真的是被这个消息队列折磨完了,谁知道鬼鸿蒙它不进行任何提示!为什么stackoverflow会不提示啊!!!太折磨了太折磨了......
  • STL-stack栈容器&queue队列容器
    <aname="LfCAT"></a>stack栈容器基本概念stack是一种先进后出(​​FristInLastOut,FILO​​)的数据结构,它只有一个出口<br/><br/>栈中只有顶端的元素才可以被外界访问......
  • 重学单调队列优化dp
    再谈单调队列优化dp。题目:CF1077F1&2PictureswithKittens(Easy&hardversion)从n个数中选出m个数,连续k个数至少选出一个,最大化选出数和。easyversion普通dp,hard则......
  • UVA540 Team Queue 队列入门经典
    题意翻译有t个团队的人正在排一个长队。每次新来一个人时,如果他有队友在排队,那么新人会插队到最后一个队友的身后。如果没有任何一个队友排队,则他会被排到长队的队尾。输入......
  • 消息队列数据丢失及可靠性
    用MQ有个基本原则,就是数据不能多一条,也不能少一条,不能多,就是前面说的重复消费和幂等性问题。不能少,就是说这数据别搞丢了。那这个问题你必须得考虑一下。如果说你这个......
  • 消息队列的延时以及过期失效,消息队列消息积压及占满问题解决思路
    大量消息在mq里积压了几个小时了还没解决几千万条数据在MQ里积压了七八个小时,从下午4点多,积压到了晚上11点多。这个是我们真实遇到过的一个场景,确实是线上故障了......
  • 消息队列部署选择
    部署是单机还是集群呢?你们高可用是怎么保证的呢?如果有人问到你MQ的知识,高可用是必问的。上一讲提到,MQ会导致系统可用性降低。所以只要你用了MQ,接下来问的一些要点......
  • (转)go语言-golang基础-queue队列和stack堆栈
    原文:https://www.cnblogs.com/malukang/p/12708850.html1.queue队列队列(queue),是一种FIFO(FirstInFirstOut)先进先出的线性表。通常用数据或者链表来实现队列。队......