Cod sursa(job #3342095)

Utilizator Andrei1209Andrei Mircea Andrei1209 Data 22 februarie 2026 19:16:10
Problema Cuburi2 Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <fstream>

using namespace std;
ifstream fin("cuburi2.in");
ofstream fout("cuburi2.out");

const int Nmax = 250000 + 5;
int v[Nmax], n, m;
long long sp[Nmax], pre[Nmax], suf[Nmax];
int main()
{
    int i;
    fin >> n >> m;
    for ( i = 1; i <= n; ++i )
    {
        fin >> v[i];
        sp[i] = sp[i - 1] + v[i];
        pre[i] = pre[i - 1] + sp[i];
    }
    long long sum = 0;
    for ( i = n; i >= 1; --i )
    {
        sum += v[i];
        suf[i] = suf[i + 1] + sum;
    }

    for ( i = 1; i <= m; ++i )
    {
        int st, dr, mij, x, y, sol = -12;
        fin >> x >> y;
        st = x;
        dr = y;

        long long s = (sp[dr] - sp[st - 1]) / 2;
        while ( st <= dr )
        {
            mij = (st + dr) / 2;
            if ( sp[mij] - sp[x - 1] <= s )
            {
                sol = mij;
                st = mij + 1;
            }
            else
                dr = mij - 1;
        }

        long long cand1 = pre[sol - 1] - pre[x - 1] + suf[sol + 1] - suf[y + 1];
        ++sol;
        long long cand2 = pre[sol - 1] - pre[x - 1] + suf[sol + 1] - suf[y + 1];

        if ( cand1 < cand2 )
            fout << sol - 1 << " " << cand1 << '\n';
        else
            fout << sol << " " << cand2 << '\n';
    }
    return 0;
}