Cod sursa(job #2863116)

Utilizator BlueLuca888Girbovan Robert Luca BlueLuca888 Data 6 martie 2022 12:52:27
Problema Cuburi2 Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <bits/stdc++.h>

using namespace std;

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

const long long DIM = 250015;

long long h[DIM], sum[DIM], lft[DIM], rgt[DIM], p, u;
long long n, q;

long long get_sum(int i, int j){
    return sum[j] - sum[i-1];
}

signed main (){
    ios_base::sync_with_stdio(false);
    fin.tie(nullptr);
    fout.tie(nullptr);

    fin>>n>>q;
    for(long long i=1; i<=n; i++){
        fin>>h[i];
        sum[i] = sum[i-1] + h[i];
    }

    for(int i=1; i<=n; i++) lft[i] = lft[i-1] + sum[i-1];
    for(int i=n; i>=1; i--) rgt[i] = rgt[i+1] + sum[n] - sum[i];

    long long stanga, mijloc, dreapta;
    long long st, dr, sol, minn;
    while(q--){
        fin>>st>>dr;

        stanga = st;
        dreapta = dr;
        while(stanga <= dreapta){
            mijloc = (dreapta - stanga) / 2 + stanga;

            if(get_sum(st, mijloc-1) < get_sum(mijloc, dr)){
                sol = mijloc;
                stanga = mijloc + 1;
            }else
                dreapta = mijloc - 1;
        }

        minn = (lft[sol] - lft[st-1] - sum[st-1]*(sol-st+1)) + (rgt[sol] - rgt[dr+1] - (sum[n]-sum[dr])*(dr-sol+1));
        fout<<sol<<" "<<minn<<"\n";
    }
    return 0;
}
/**


**/