349
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