Cod sursa(job #2838840)

Utilizator andreiiorgulescuandrei iorgulescu andreiiorgulescu Data 24 ianuarie 2022 19:07:45
Problema Cuburi2 Scor 55
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <bits/stdc++.h>

using namespace std;

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

long long n,m,sp[250005],v2[250005],v1[250005],a[250005];

long long S(int p,int x,int y)
{
    long long s1,s2,s;
    s1 = v1[x] - v1[p] - 1ll * (n - p + 1) * (sp[p - 1] - sp[x - 1]);
    s2 = v2[y] - v2[p] - 1ll * p * (sp[y] - sp[p]);
    s = s1 + s2;
    return s;
}

int main()
{
    in >> n >> m;
    for (int i = 1; i <= n; i++)
    {
        int x;
        in >> x;
        a[i] = x;
        sp[i] = sp[i - 1] + x;
        v2[i] = v2[i - 1] + 1ll * x * i;
    }
    for (int i = n; i >= 1; i--)
        v1[i] = v1[i + 1] + 1ll * a[i] * (n - i + 1);
    for (int i = 1; i <= m; i++)
    {
        int st,dr,mij;
        in >> st >> dr;
        int x = st,y = dr;
        while (st < dr)
        {
            mij = (st + dr) / 2;
            if (S(mij,x,y) < S(mij - 1,x,y) and S(mij,x,y) < S(mij + 1,x,y))
            {
                st = mij;
                break;
            }
            else if (S(mij + 1,x,y) < S(mij,x,y))
                st = mij + 1;
            else
                dr = mij - 1;
        }
        out << st << " " << S(st,x,y) << '\n';
    }
    return 0;
}