fbpx

Problema #2789 – cb3 – Rezolvari PBInfo

de Mihai-Alexandru

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 ≤ 10000
  • 1 ≤ Q ≤ 100000
  • 1 ≤ 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

S-ar putea sa iti placa