Cod sursa(job #2865220)

Utilizator alexdmnDamian Alexandru alexdmn Data 8 martie 2022 17:05:10
Problema Cuburi2 Scor 23
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.43 kb
#include <fstream>

using namespace std;
long long int v[250005], su[250005], d[250005];
int main()
{
	ifstream cin("cuburi2.in");
	ofstream cout("cuburi2.out");
    long long int n, m, x, y, s = 0, st, dr, ls, lb, mid, minn;
    cin >> n >> m;

    for(int i = 1; i <= n; i++)
    {
        cin >> v[i];
    }

    for(int k = 0; k < m; k++)
    {
        cin >> x >> y;
        s = v[y] * (y - x);
        d[y] = v[y];

        for(int i = y - 1; i >= x; i--)
        {
            s += v[i] * (i - x);
            d[i] = d[i + 1] + v[i];
        }

        for(int i = x; i <= y; i++)
        {
            su[i] = d[x] - 2 * d[i];
        }

        st = x;
        dr = y;

        while(st <= dr)
        {
            mid = (dr - st) / 2 + st;

            if(su[mid] < 0)
            {
                st = mid + 1;
                ls = mid;
            }
            else
            {
                lb = mid;
                dr = mid - 1;
            }
        }
		su[x]=0;
        for(int i = x; i <= lb; i++)
        {
            s += su[i];

            if(i == ls)
            {
                minn = s;
            }
            else if(i == lb)
            {
                if(s < minn)
                {
                    minn = s;
                    ls = lb;
                }
            }
        }

        cout << ls << " " << minn << '\n';
    }

    return 0;
}