Cod sursa(job #1201072)

Utilizator enedumitruene dumitru enedumitru Data 24 iunie 2014 13:58:15
Problema Cuburi2 Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
#include<cstdio>
#define Nmax 250002
#define ll long long
using namespace std;
int n,m,p,x,y,i,step,a[Nmax];
ll nr,ss[Nmax],sd[Nmax],ts[Nmax],td[Nmax];
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]); ss[i]=ss[i-1]+a[i]; ts[i]=ts[i-1]+ss[i];}
    for(i=n;i;--i) {sd[i]=sd[i+1]+a[i]; td[i]=td[i+1]+sd[i];}
    while(m--)
    {   scanf("%d%d",&x,&y);
		for(step=1;step<y-x;step<<=1);
		for(p=x;step;step>>=1)
            if(p+step<=y&&ss[p+step-1]-ss[x-1]<sd[p+step]-sd[y+1]) p+=step;
		nr=ts[p-1]-ts[x-1]-ss[x-1]*(p-x)+td[p+1]-td[y+1]-sd[y+1]*(y-p);	
        printf("%d %lld\n",p,nr);
    }
    return 0;
}