Cod sursa(job #2184341)

Utilizator ivddabDabelea Ioana-Viviana ivddab Data 23 martie 2018 22:57:46
Problema Cuburi2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <bits/stdc++.h>
#define N 250005
using namespace std;
int arr[N];
long long X1[N],X2[N];
long long Y1[N],Y2[N];
int p,x,y;
void src(int a,int b)
{
    int m;
    while(a<=b)
    {
        m=(a+b)>>1;
        if(X2[m-1]-X2[x-1]<X2[y]-X2[m-1])
        {
            p=m;
            a=m+1;
        }
        else
            b=m-1;
    }
}
int main()
{
    freopen("cuburi2.in","r",stdin);
    freopen("cuburi2.out","w",stdout);
    int n,k,i;
    long long st,dr;
    scanf("%d%d",&n,&k);
    for(i=1;i<=n;++i)
    {
        scanf("%d",&arr[i]);
        X2[i]=X2[i-1]+arr[i];
        X1[i]=X1[i-1]+X2[i-1];
    }
    for(i=n;i>0;--i)
    {
        Y2[i]=Y2[i+1]+arr[i];
        Y1[i]=Y1[i+1]+Y2[i+1];
    }
    while(k--)
    {
        scanf("%d%d",&x,&y);
        p=x;
        src(x,y);
        st=X1[p]-X1[x-1]-X2[x-1]*(p-x+1);
        dr=Y1[p]-Y1[y+1]-Y2[y+1]*(y-p+1);
        printf("%d %lld\n",p,1LL*(st+dr));
    }
    return 0;
}