Cod sursa(job #1200984)

Utilizator enedumitruene dumitru enedumitru Data 24 iunie 2014 10:06:58
Problema Cuburi2 Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include<cstdio>
#define Nmax 250002
#define ll long long
using namespace std;
int n,m,p,x,y,i;
ll nr,a[Nmax],sl[Nmax],sr[Nmax],tl[Nmax],tr[Nmax];
int cbin(int x, int y)
{   int s=x,st=x,dr=y,mi;
    while(st<=dr)
    {	mi=(st+dr)>>1;
        if(sl[mi-1]-sl[x-1]<sr[mi]-sr[y+1]) s=mi, st=mi+1; else dr=mi-1;
    }
    return s;
}
int main()
{   freopen("cuburi2.in","r",stdin); freopen("cuburi2.out","w",stdout);
    scanf("%d%d",&n,&m);
    for(i=1;i<=n;++i) {scanf("%d",&a[i]); sl[i]=sl[i-1]+a[i]; tl[i]=tl[i-1]+sl[i];}
    for(i=n;i;--i) {sr[i]=sr[i+1]+a[i]; tr[i]=tr[i+1]+sr[i];}
    while(m--)
    {   scanf("%d%d",&x,&y);
        p=cbin(x,y);
        nr=tl[p-1]-tl[x-1]-sl[x-1]*(p-x)+tr[p+1]-tr[y+1]-sr[y+1]*(y-p);
        printf("%d %lld\n",p,nr);
    }
    return 0;
}