379
Se consideră un șir de numere naturale nenule a[1], a[2], …, a[n]. Asupra șirului se efectuează Q interogări de forma: care este numărul maxim de elemente ale șirului a căror sumă nu depășește valoarea S ?
Cerință
Trebuie să răspundeți la cele Q interogări.
Date de intrare
Fișierul de intrare cb3.in conține pe prima linie numerele n și Q. Pe a doua linie n numere naturale nenule, separate prin spații, ce reprezintă elementele șirului. Pe următoarele Q linii se află sumele aferente celor Q interogări.
Date de ieșire
Fișierul de ieșire cb3.out va conține pe câte o linie răspunsurile la cele Q interogări.
Restricții și precizări
1 ≤ n ≤ 100001 ≤ Q ≤ 1000001 ≤ S ≤ 2.000.000.000- numerele de pe a doua linie a fișierului de intrare vor fi mai mici decât
1.000.000
Exemplu
cb3.in
5 3 1 2 3 4 5 6 17 5
cb3.out
3 5 2
#include <bits/stdc++.h>
using namespace std;
ifstream cin("cb3.in");
ofstream cout("cb3.out");
int a[10001] , n;
long long int sp[10001];
int cb(int x)
{
int st = 1 , dr = n;
while(st <= dr)
{
int mij = (st + dr) / 2;
if(sp[mij] > x)
dr = mij - 1;
if(sp[mij] < x)
st = mij + 1;
if(sp[mij] == x)
return mij;
}
return dr;
}
int main()
{
int q;
cin >> n >> q;
for(int i = 1 ; i <= n ; ++i)
cin >> a[i];
sort(a+1 , a+n+1);
for(int i = 1 ; i <= n ; ++i)
sp[i]=sp[i-1]+a[i];
int x;
for(int i = 1 ; i <= q ; ++i)
{
cin >> x;
cout << cb(x) << '\n';
}
return 0;
}
Comentarii