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; }