Cod sursa(job #2407133)

Utilizator Mihai145Oprea Mihai Adrian Mihai145 Data 16 aprilie 2019 15:51:22
Problema Cuburi2 Scor 32
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <fstream>

using namespace std;

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

const int NMAX = 250000;

int N, M;

int sp[NMAX + 5];
int st[NMAX + 5];
int dr[NMAX + 5];

int main()
{
    int x, y;

    fin >> N >> M;

    for(int i = 1; i <= N; i++)
    {
        fin >> x;
        sp[i] = sp[i - 1] + x;
        st[i] = st[i - 1] + sp[i];
    }

    for(int i = N; i >= 1; i--)
        dr[i] = dr[i + 1] + sp[N] - sp[i - 1];

    for(int i = 1; i <= M; i++)
    {
        fin >> x >> y;

        int stt = x, drr = y, mid, sol = x;

        while(stt <= drr)
        {
            mid = (stt + drr) >> 1;

            if(sp[mid - 1] - sp[x - 1] < sp[y] - sp[mid - 1])
            {
                stt = mid + 1;
                sol = mid;
            }
            else
                drr = mid - 1;
        }

        long long t = st[sol - 1] + dr[sol + 1] - st[x - 1] - dr[y + 1] - sp[x - 1] * (sol - x) - (sp[N] - sp[y]) * (y - sol);
        fout << sol << ' ' << t << '\n';
    }

    return 0;
}