Cod sursa(job #1385871)

Utilizator zombacDica Razvan zombac Data 12 martie 2015 15:24:08
Problema Cuburi2 Scor 22
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <fstream>
#define Max_Size 250010
using namespace std;
ifstream fin ("cuburi2.in");
ofstream fout ("cuburi2.out");
int N, M, V[Max_Size], ST[Max_Size], DR[Max_Size];

int Calc_Val(int st, int dr, int midle)
{
    int v_left = ST[midle - 1] - ST[st - 1] - (V[st - 1] * (midle - st));
    int v_right = DR[midle + 1] - DR[dr + 1] - ((V[N] - V[dr]) * (dr - midle));
    return v_left + v_right;
}

int main()
{
    fin >> N >> M;
    for (int i = 1; i <= N; i++)
    {
        fin >> V[i];
        V[i] = V[i] + V[i-1];
    }

    for (int i = 1; i <= N; i++) {
        ST[i] = ST[i-1] + V[i];
    }

    for (int i = N; i >= 1; i--) {
        DR[i] = DR[i+1] + V[N] - V[i-1];
    }

    for (int i = 1; i <= M; i++)
    {
        int x, y, p, u, mij, sol;
        fin >> x >> y;
        p = x;
        u = y;

        while (p <= u)
        {
            mij = (p + u) / 2;
            if (Calc_Val(x, y, mij) <= Calc_Val(x, y, mij + 1))
            {
                sol = mij;
                u = mij - 1;
            }
            else
            {
                p = mij + 1;
            }
        }

        fout << sol << ' ' << Calc_Val(x, y, sol) << '\n';
    }

    fout.close();
    return 0;
}