Cod sursa(job #2783218)

Utilizator damiantudorDamian Tudor Christian damiantudor Data 13 octombrie 2021 23:33:26
Problema Cuburi2 Scor 32
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <bits/stdc++.h>

using namespace std;

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

long long n,m,x,y;
int sp[250001],sd[250001],v[250001],s1[250001],s2[250001];
int st,dr,mij,i;

int main()
{
    in>>n>>m;
    for(i=1;i<=n;i++)
    {
        in>>v[i];
        sd[i]=sd[i-1]+v[i];
    }
    for(i=n;i>=1;i--)
    {
        sp[i]=sp[i+1]+v[i];
    }
    for(i=1;i<=n;i++)
    {
        s1[i]=s1[i-1]+sd[i-1];
    }
    for(i=n;i>=1;i--)
    {
        s2[i]=s2[i+1]+sp[i+1];
    }
    for(i=1;i<=m;i++)
    {
        in>>x>>y;
        int st = x, dr = y, pos = x;
        while(st <= dr){
            int mij = (st + dr) / 2;
            if(sd[mij - 1] - sd[x - 1] < sd[y] - sd[mij - 1]){
                st = mij + 1;
                pos = mij;
            }
            else dr = mij - 1;
        }
        long long Sol = s1[pos] - s1[x] - sd[x - 1] * (pos - x);
        Sol = Sol + s2[pos] - s2[y] - sp[y + 1] * (y - pos);
        out<<pos<<' '<<Sol<<'\n';
    }
    return 0;
}