zoukankan      html  css  js  c++  java
  • tyvj1305 最大子序和(单调队列

    题目地址:http://www.joyoi.cn/problem/tyvj-1305

     

    最大子序和

    题目限制

    时间限制 内存限制 评测方式 题目来源
    1000ms 131072KiB 标准比较器 Local

    题目描述

    输入一个长度为n的整数序列,从中找出一段不超过M的连续子序列,使得整个序列的和最大。

    例如 1,-3,5,1,-2,3

    当m=4时,S=5+1-2+3=7
    当m=2或m=3时,S=5+1=6

    输入格式

    第一行两个数n,m
    第二行有n个数,要求在n个数找到最大子序和

    输出格式

    一个数,数出他们的最大子序和

    提示

    数据范围:
    100%满足n,m<=300000

    样例数据

    输入样例 #1输出样例 #1
    6 4
    1 -3 5 1 -2 3
    7

    代码如下:

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn = 3e5+5;
    int a[maxn];
    int sum[maxn];
    int q[maxn];
    int main(){
        int n,k;
        scanf("%d%d",&n,&k);
        a[0]=sum[0]=0;
        for(int i=1;i<=n;i++){
            scanf("%d",&a[i]);
            sum[i]=sum[i-1]+a[i];
        }
        int l,r;
        l=r=1;
        int ans=-1;
        q[1]=0;
        for(int i=1;i<=n;i++){
            while(l<=r&&q[l]<i-k) l++;
            ans=max(ans,sum[i]-sum[q[l]]);
            while(l<=r&&sum[q[r]]>=sum[i]) r--;
            q[++r]=i; 
        }
        cout<<ans<<endl;
    
    }
    View Code
    每一个不曾刷题的日子 都是对生命的辜负 从弱小到强大,需要一段时间的沉淀,就是现在了 ~buerdepepeqi
  • 相关阅读:
    HDU 5918 SequenceI (2016 CCPC长春站 KMP模版变形)
    HDU 4585 Shaolin (set的应用)
    HDU 4329 MAP(stringstream的用法)
    CodeForces 698B Fix a Tree (并查集应用)
    UVALive 2520 Holedox Moving(BFS+状态压缩)
    UVA
    毛竹
    kmp
    博弈论
    最长回文子串
  • 原文地址:https://www.cnblogs.com/buerdepepeqi/p/9452964.html
Copyright © 2011-2022 走看看