zoukankan      html  css  js  c++  java
  • 最大子序和

    题目描述

    输入一个长度为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,m<=300000)
    第二行有n个数,要求在n个数找到最大子序和

    输出

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

    样例输入

    6 4
    1 -3 5 1 -2 3

    样例输出

    7

    #include <iostream>
    #include <string>
    #include <cstdio>
    #include <cmath>
    #include <cstring>
    #include <algorithm>
    #include <vector>
    #include <queue>
    #include <deque>
    #include <map>
    #define range(i,a,b) for(int i=a;i<=b;++i)
    #define LL long long
    #define rerange(i,a,b) for(int i=a;i>=b;--i)
    #define fill(arr,tmp) memset(arr,tmp,sizeof(arr))
    using namespace std;
    int n,m,ans,ss[300005],qq[300005];
    void init() {
        cin>>n>>m;
        range(i,1,n){
            cin>>ss[i];
            ss[i]+=ss[i-1];
        }
    }
    void solve(){
        int front=1,tail=1;
        range(i,1,n){
            if(i-qq[front]>m)front++;
            ans=max(ans,ss[i]-ss[qq[front]]);
            while(front<=tail&&ss[qq[tail]]>=ss[i])tail--;
            tail++;
            qq[tail]=i;
        }
        cout<<ans<<endl;
    }
    int main() {
        init();
        solve();
        return 0;
    }
    View Code
  • 相关阅读:
    js继承《转》
    千分位分割正则
    所有事件失效
    658. Find K Closest Elements
    278. First Bad Version
    153. Find Minimum in Rotated Sorted Array
    11. Container With Most Water
    205. Isomorphic Strings
    75. Sort Colors
    695. Max Area of Island
  • 原文地址:https://www.cnblogs.com/Rhythm-/p/9336411.html
Copyright © 2011-2022 走看看