Cod sursa(job #465592)

Utilizator eudanipEugenie Daniel Posdarascu eudanip Data 24 iunie 2010 20:58:26
Problema Cuburi2 Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include<stdio.h>
#define ll long long

ll s[300005];
ll p[300005];
int v[300005],n,m;

inline ll calc(int i,int j,int k)
{
    return (p[j]+p[i-1]-2*p[k]+k*(2*s[k]-s[i-1]-s[j]));
}

int main ()
{
    int i,mij,st,dr,c1,c2,sol;
    freopen("cuburi2.in","r",stdin);
    freopen("cuburi2.out","w",stdout);
    scanf("%d%d",&n,&m);
    for(i=1;i<=n;i++)
        scanf("%d",&v[i]);
    for(i=1;i<=n;i++)
    {
        s[i]=s[i-1]+v[i];
        p[i]=p[i-1]+(ll)v[i]*i;
    }
    for(i=1;i<=m;i++)
    {
        scanf("%d%d",&c1,&c2);
        st=c1;
        dr=c2;sol=n;
        while(st<=dr)
        {
            mij=(st+dr)/2;
            if(calc(c1,c2,mij)<=calc(c1,c2,mij+1))
            {
                sol=mij;
                dr=mij-1;
            }
            else
                st=mij+1;
        }
        printf("%d %lld\n",sol,calc(c1,c2,sol));
    }
    return 0;
}