Cod sursa(job #2080313)

Utilizator DovlecelBostan Andrei Dovlecel Data 2 decembrie 2017 19:17:21
Problema Cuburi2 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("orase2.in");
ofstream g("orase2.out");
int v[250001],n,m;
long long st[250001],dr[250001],sum1[250001],sum2[250001];
const int L=19;
long long cost(int i, int j)
{
    long long cost=0;
    if(i<j)
        cost=st[j]-st[i]-(j-i)*sum1[i-1];
    else
        cost=dr[j]-dr[i]-(i-j)*sum2[i+1];
    return cost;
}
int main()
{
    int x,y,i,r,pas;
    f>>n>>m;
    for(i=1;i<=n;i++)
    {
        f>>v[i];
        sum1[i]=sum1[i-1]+v[i];
        st[i]=st[i-1]+sum1[i-1];
    }
    for(i=n;i>=1;i--)
    {
        sum2[i]=sum2[i+1]+v[i];
        dr[i]=dr[i+1]+sum2[i+1];
    }
    for(i=1;i<=m;i++)
    {
        f>>x>>y;
        pas=1<<L;
        r=0;
        while(pas!=0)
        {
            if(cost(x,x+r+pas)+cost(y,x+r+pas)<=cost(x,x+r+pas-1)+cost(y,x+r+pas-1) && x+r+pas<=y)
                r=r+pas;
            pas=pas/2;
        }
        g<<x+r<<' '<<cost(x,x+r)+cost(y,x+r)<<'\n';
    }
    return 0;
}