Max Sum of Max-K-sub-sequence题解

news/2024/11/23 20:23:33/

HDU-3415 Max Sum of Max-K-sub-sequence

题目大意

给你一个环形数组 a a a,求长度不超过 k k k的连续非空子段和的最大值以及这个子段的开始位置和结束位置。如果有多个结果,则输出起始位置最小的答案。如果还有多个结果,则输出长度最小的答案。

t t t组数据。

1 ≤ t ≤ 100 , 1 ≤ n ≤ 100000 , 1 ≤ k ≤ n , − 1000 ≤ a i ≤ 1000 1\leq t\leq 100,1\leq n\leq 100000,1\leq k\leq n,-1000\leq a_i\leq 1000 1t100,1n100000,1kn,1000ai1000


题解

首先,把数组 a a a复制一份,放在 a a a后面,破环为链。

然后,我们求 a [ i ] a[i] a[i]的前缀和 s u m [ i ] sum[i] sum[i]。遍历一遍数组,当前遍历到的位置 i i i视为子段的结束位置。设以 i i i为结束位置的能使子段和最大的开始位置为 j + 1 j+1 j+1,因为子段和为 s u m i − s u m j sum_i-sum_j sumisumj,所以只要知道在 [ i − k , i − 1 ] [i-k,i-1] [ik,i1]上最小的 s u m j sum_j sumj,即可得到 j j j,这样就能得到开始位置 j + 1 j+1 j+1。用单调队列来维护区间最小前缀和,即可 O ( n ) O(n) O(n)处理每一次询问。

总时间复杂度为 O ( ∑ n ) O(\sum n) O(n)

code

#include<iostream>
#include<cstdio>
using namespace std;
int t,n,k,hd,tl,ans,p1,p2,a[200005],sum[200005],q[200005];
int main()
{scanf("%d",&t);while(t--){scanf("%d%d",&n,&k);for(int i=1;i<=n;i++){scanf("%d",&a[i]);a[n+i]=a[i];}for(int i=1;i<=2*n;i++){sum[i]=sum[i-1]+a[i];}hd=1;tl=1;q[1]=0;ans=-1e9;p1=p2=0;for(int i=1;i<=2*n;i++){while(q[hd]<i-k) ++hd;if(sum[i]-sum[q[hd]]>ans){ans=sum[i]-sum[q[hd]];p1=q[hd]+1;p2=i;}while(hd<=tl&&sum[q[tl]]>=sum[i]) --tl;q[++tl]=i;}if(p2>n) p2-=n;printf("%d %d %d\n",ans,p1,p2);}return 0;
}

http://www.ppmy.cn/news/740648.html

相关文章

TP6(jwt)token

thinkphp jwt auth composer https://github.com/QThans/jwt-auth https://packagist.org/packages/thans/tp-jwt-auth https://gitee.com/thans/jwt-authhttps://github.com/firebase/php-jwt http://blog.daozys.com/goods_90.html

JWT(json+web+token)的详情与细节

一.JWT是什么东西: JSON Web Token (JWT)是一个开放标准(RFC 7519)&#xff0c;它定义了一种紧凑的、自包含的方式&#xff0c;用于作为JSON对象在各方之间安全地传输信息。该信息可以被验证和信任&#xff0c;因为它是数字签名的。 .简单地说&#xff0c;JWT是一个字符串&…

Tableau实现帕累托图

1.帕累托图 帕累托图(也叫做柏拉图)是“二八”原则的图形化体现。当使用帕累托图排查质量问题时&#xff0c;只要花费少量精力和时间解决累计占比达到80%的问题的导致因素&#xff0c;就能显著改善质量问题&#xff0c;没必要花费更多的精力和时间去解决20%的问题。 2.Tableau…

Gson学习TypeToken

最早接触到Gson是因为项目中有人使用了json&#xff0c;很多项目都会用到。Gson的使用非常方便&#xff0c;不需要关心对象封装了几层&#xff0c;引用了多少list、map在代码里。只要new Gson().tojson(dataObj)就可以了。反过来&#xff0c;new Gson().fromjson(jsonStr, clas…

Ant Design Pro:token的存储

Ant Design Pro使用umi中的useModel存储源数据 — 将用户信息currentUser也存储了其中 — import { useModel } from umi; const { initialState, setInitialState } useModel(initialState);用户信息与token的关闭是紧密相连的&#xff0c;所以大可直接将token存在currentU…

前台解析jwt token 前后端分离 ant design pro

前言 在如今得环境下&#xff0c;越来越多得项目采用微服务&#xff0c;前后端分离项目。优点在于同时开发&#xff0c;分开部署。缺点在于需要约定的太多&#xff0c;导致前后端联调产生分歧。就标题而言&#xff0c;解决前端antd 接收后台返回的jwt token字符串 进行解析做记…

laravel整合 tymon/jwt-auth

安装 composer require tymon/jwt-auth#生成 JWT_SECRET 写入.env&#xff08;自动写入&#xff09; php artisan jwt:secret 配置文件 config/app.php //providers数组中添加如下代码 providers>[...Tymon\JWTAuth\Providers\LaravelServiceProvider::class, ],//在ali…

Suunto Traverse 运动模式添加

程序员身体素质也要硬&#xff0c;所以最近买了个Suunto Traverse运动手表&#xff0c;入手这个手表就是看中了续航时间比较长&#xff0c;不用老充电&#xff0c;之前买了个Ticwatch Pro向乎每天都要充电&#xff0c;太烦心了。 Traverse 中文品牌翻译是远征&#xff0c;个人…