Cod sursa(job #2349734)

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

using namespace std;

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

int a[100005], k, n;

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;
    int cnt = 0;
    for(int i = poz - 1; i >= 1; --i)
    {
        cnt += a[i];
        if(cnt >= nrG)
        {
            nrLOc++;
            cnt %= 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];

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