Cod sursa(job #2430650)

Utilizator AndreiDeltaBalanici Andrei Daniel AndreiDelta Data 15 iunie 2019 18:06:20
Problema Cuburi2 Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <bits/stdc++.h>
#define Dim 250009
using namespace std;
ifstream f("cuburi2.in");
ofstream g("cuburi2.out");
typedef long long ll;
ll S[Dim],x,y,N,M,ans1,ans2;
ll V[Dim],Down[Dim],Up[Dim],S2[Dim];

int main()
{
    f>>N>>M;
    for(int i=1;i<=N;i++)
    {
        f>>x;
        V[i]=x;
        S[i]=S[i-1]+x;
        Down[i]=Down[i-1]+S[i];
    }
    for(int i=N;i>=1;i--)
    {
        S2[i]=S2[i+1]+V[i];
        Up[i]=Up[i+1]+S2[i];
    }
    for(int i=1;i<=M;i++)
    {
        f>>x>>y;
        int st=x,dr=y;
        ans1=0;
        while(st<=dr)
        {
            int mij=(st+dr)/2;
            if(S[mij-1]-S[x-1]<S[y]-S[mij-1])
            {
                st=mij+1;
                ans1=mij;
            }
            else dr=mij-1;
        }
        ans2=Down[ans1-1]+Up[ans1+1]-Down[x-1]-Up[y+1]-S[x-1]*(ans1-x)-(y-ans1)*(S[N]-S[y]);
        g<<ans1<<" "<<ans2<<'\n';
    }

    return 0;
}