Cod sursa(job #2349740)

Utilizator MateiAruxandeiMateiStefan MateiAruxandei Data 20 februarie 2019 17:56:33
Problema Grupuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <fstream>

using namespace std;

ifstream fin("grupuri.in");
ofstream fout("grupuri.out");

int a[100005], k, n;
long long s[100005];

int test(long long nrG)
{
    int poz = 0;
    int st = 1;
    int dr = n;
    while(st <= dr)
    {
        int mij = (st + dr) / 2;
        if(a[mij] < nrG)
        {
            poz = mij;
            st = mij + 1;
        }
        else
            dr = mij - 1;
    }

    ++poz;

    int nrLOc = n - poz + 1;
    nrLOc += (s[poz - 1] / nrG);
    if(nrLOc > k)
        return 2;

    if(nrLOc == k)
        return 1;
    return 0;
}

int main()
{
    fin >> k >> n;

    for(int i = 1; i <= n; ++i){
        fin >> a[i];
        s[i] = s[i - 1] + a[i];
    }

    int afis = -1;
    int st = 1;
    long long dr = 100000000005;
    while(st <= dr)
    {
        long long mij = (st + dr) / 2;
        int val = test(mij);
        if(val == 1)
        {
            afis = mij;
            st = mij + 1;
        }
        else if(val == 2)
            st = mij + 1;
        else
            dr = mij - 1;
    }

    fout << afis << '\n';
    return 0;
}