Cod sursa(job #266754)

Utilizator DraStiKDragos Oprica DraStiK Data 26 februarie 2009 08:12:41
Problema Cuburi2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <stdio.h>
#define DIM 250005
#define ll long long
int a[DIM];
int n,m,s;
ll s1[DIM],s2[DIM],si1[DIM],si2[DIM];
ll sol;
void read ()
{
    int i;
    scanf ("%d%d",&n,&m);
    for (i=1; i<=n; ++i)
        scanf ("%d",&a[i]);
}
void proc ()
{
    int i,j;
    for (i=1, j=n; i<=n, j; ++i, --j)
    {
        s1[i]=s1[i-1]+a[i];
        si1[i]=si1[i-1]+s1[i];
        s2[j]=s2[j+1]+a[j];
        si2[j]=si2[j+1]+s2[j];   
    }
}
void solve ()
{
    int i,x,y,st,dr,mij;
    for (i=1; i<=m; ++i)
    {
        scanf ("%d%d",&x,&y);
        st=x;
        dr=y;
        while (st<=dr)
        {
            mij=(st+dr)/2;
            if (s1[mij-1]-s1[x-1]<s2[mij]-s2[y+1])
            {
                s=mij; 
                st=mij+1;
            }
            else
                dr=mij-1;   
        }
        sol=si1[s-1]-si1[x-1]-s1[x-1]*(s-x)+si2[s+1]-si2[y+1]-s2[y+1]*(y-s);
        printf ("%d %lld\n",s,sol);
    }
}
int main ()
{
    freopen ("cuburi2.in","r",stdin);
    freopen ("cuburi2.out","w",stdout);    
    read ();
    proc ();
    solve ();
    return 0;
}