fbpx

Problema #3163 – SecvMaxVal – Rezolvari PBInfo

de Mihai-Alexandru

Cerința

Se dă un șir de n numere naturale și un număr natural val. Determinați lungimea maximă a unei secvențe cu proprietatea că suma numerelor din aceasta este mai mică sau egală cu val.

Date de intrare

Fișierul de intrare secvmaxval.in conține pe prima linie numerele n și val, iar pe a două linie n numere naturale separate prin spații.

Date de ieșire

Fișierul de ieșire secvmaxval.out va conține pe prima linie lungimea maximă a unei secvențe care satisface proprietatea dată.

Restricții și precizări

  • 1 ≤ n ≤ 200.000
  • numerele de pe a două linie a fișierului de intrare vor fi mai mici decât 1.000.000.000
  • 1 ≤ val ≤ 2^63

Exemplu

secvmaxval.in

5 11
4 5 2 3 9

secvmaxval.out

3

Explicație

O secvență de lungime maximă cu suma elementelor mai mică sau egală cu 11 este 5 2 3.

#include <bits/stdc++.h>
using namespace std;

ifstream cin("secvmaxval.in");
ofstream cout("secvmaxval.out");

long long int a[200001], is = 1, lmax, s;

int main(){
    long long int n, k;
    cin >> n >> k;
    for(int i = 1 ; i <= n; ++i)
        cin >> a[i];
    for(int i = 1 ; i <= n; ++i)
    {
        s += a[i];
        if(s > k)
        {
            if(i - is + 1 > lmax)
                lmax = i - is + 1;
            s-=a[is];
            is++;
        }
    }
    if(n - is + 1 > lmax)
        lmax = n - is + 1;
    if(n - is + 1 == lmax)
        lmax++;
    cout << lmax - 1;
    return 0;
}
Comentarii

S-ar putea sa iti placa