tyvj 1305 —— 长度不超过m的最大连续和 【前缀和+单调队列】

题目:http://www.tyvj.cn/p/1305

定义:

  sum[i]=a[1]+a[2]+...+a[i]  即,sum[i]为序列a的前缀和

  dp[i] = sum[i] - min(sum[j])  (i-j<m) 即,dp[i]为以i结尾的满足长度不大于m的最大连续和

则:

  答案为 max(dp[i])  (1≤i≤n)

#include <cstdio>
#include <iostream>

using namespace std;

int sum[300005];
int st[300005];

int main ()
{
    int n, m, x, l, r, minn, ans;
    while(scanf("%d%d", &n, &m) != EOF) {

        for(int i=1; i<=n; i++) {
            scanf("%d", &x);
            sum[i] = sum[i-1] + x;
        }     // 维护一个单调递增队列
        l=r=0;
        st[r++]=0;
        ans = sum[1];
        for(int i=1; i<=n; i++) {
            while(l<r && i-st[l] > m)    l++;
            minn = sum[st[l]];
            if(ans < sum[i]-minn)    ans = sum[i] - minn;
            while(l<r && sum[i] < sum[st[r-1]])    r--;
            st[r++] = i;
        }
        printf("%d\n", ans);
    }
    return 0;
}
时间: 2024-12-10 03:57:24

tyvj 1305 —— 长度不超过m的最大连续和 【前缀和+单调队列】的相关文章

MQTT 协议 Client ID 长度不能超过23个字符(MqttException: MQIsdp ClientId &gt; 23 bytes)

今天遇到一个MQTT的问题,MqttException: MQIsdp ClientId > 23 bytes ClientId的长度大于23时,无法链接MQTT服务器. 经过查看协议发现:客户端标识符(Client ID)是介于1和23个字符长度,客户端到服务器的唯一标识.它必须在搜有客户端连接到一台服务器是唯一的,是在处理QoS级别1和2的消息ID中的关键.如果客户端ID包含23个字符,服务器响应CONNECT消息,通过一个CONNACK,返回码2:标识符被拒绝. 英文原版的协议中是这样描述

MQTT 协议 Client ID 长度不能超过23个字符

今天遇到一个MQTT的问题,MqttException: MQIsdp ClientId > 23 bytes ClientId的长度大于23时,无法链接MQTT服务器. 经过查看协议发现:客户端标识符(Client ID)是介于1和23个字符长度,客户端到服务器的唯一标识.它必须在搜有客户端连接到一台服务器是唯一的,是在处理QoS级别1和2的消息ID中的关键.如果客户端ID包含23个字符,服务器响应CONNECT消息,通过一个CONNACK,返回码2:标识符被拒绝. 英文原版的协议中是这样描述

数学:给你长度1~n的线段 组成三角形最长边长度不超过你的n三角形有多少个

Triangle Counting 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 You are given n rods of length 1, 2-, n. You have to pick any 3 of them and build a triangle. How many distinct triangles can you make? Note that, two triangles will be considered different if

CSS控制文本的长度,超过一行显示省略号

代码如下: <div style="width:100px;height:20px;text-overflow:ellipsis; white-space:nowrap; overflow:hidden; ">a b c d e f g h i j k l , msa sd sd sa w df f </div> text-overflow属性仅是注解,当文本溢出时是否显示省略标记.并不具备其它的样式属性定义.我们想要实现溢出时产生省略号的效果.还必须定义:强制

WPF 字符串溢出判断,字符串长度是否超过控件宽度

TextBloc可以将TextTrimming属性设置为CharacterEllipsis 其他控件可以在控件大小变更或者其他事件上附加下列方法 1 private void OnEllipsis(object sender, SizeChangedEventArgs e) 2 { 3 FormattedText formattedText = new FormattedText( 4 this.Header.ToString(), 5 Thread.CurrentThread.CurrentC

725. Split Linked List in Parts把链表分成长度不超过1的若干部分

[抄题]: Given a (singly) linked list with head node root, write a function to split the linked list into k consecutive linked list "parts". The length of each part should be as equal as possible: no two parts should have a size differing by more t

生日礼物 HYSBZ - 1293 【单调队列】【求最短区间的长度,区间需要满足包含所有颜色种类】

生日礼物 小西有一条很长的彩带,彩带上挂着各式各样的彩珠.已知彩珠有N个,分为K种.简单的说,可以将彩带考虑为x轴,每一个彩珠有一个对应的坐标(即位置).某些坐标上可以没有彩珠,但多个彩珠也可以出现在同一个位置上. 小布生日快到了,于是小西打算剪一段彩带送给小布.为了让礼物彩带足够漂亮,小西希望这一段彩带中能包含所有种类的彩珠.同时,为了方便,小西希望这段彩带尽可能短,你能帮助小西计算这个最短的长度么?彩带的长度即为彩带开始位置到结束位置的位置差. Input 第一行包含两个整数N, K,分别表

2017年“达内杯”台州学院第十届大学生程序设计竞赛 非官方题解

感谢crq兄弟搞了这次校赛,让我认识到了自己傻的时候确实傻的可爱.crq棒棒哒,我们OJ也十年多了,不容易啊.大家能用得上的时候确实要练好基本功啊. 5259: 多项式值统计   Time Limit(Common/Java):1000MS/3000MS     Memory Limit:65536KByteTotal Submit: 316            Accepted:35 Description 形如anxn+an-1xn-1+-+a2x2 +a1x +a0的多项式称为一元多项式

单调队列 I

2009国家集训队徐持衡的论文<浅谈几类背包问题>里提到的一个经典问题: 长度限制最大连续和问题: 给出长度为 n 的序列 X i ,求这个序列中长度不超过 Lmax 的最大连续和. Implementation #include <bits/stdc++.h> using namespace std; const int N(1e5+5); typedef pair<int,int> P; P que[N]; int main(){ int n, l, ans=0,