Pagini recente » Cod sursa (job #1516169) | Cod sursa (job #1779411) | Cod sursa (job #443283) | Cod sursa (job #2699930) | Cod sursa (job #264273)
Cod sursa(job #264273)
#include <stdio.h>
#define N 250005
int n,m,i,x,y,low,mid,high,p,a[N];
long long c1,c2,s1[N],s2[N],ss1[N],ss2[N];
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]);
//preproc
for (i=1;i<=n;++i){s1[i]=s1[i-1]+a[i];ss1[i]=ss1[i-1]+s1[i];}
for (i=n;i>0 ;--i){s2[i]=s2[i+1]+a[i];ss2[i]=ss2[i+1]+s2[i];}
////
for (;m;--m){
scanf("%d %d",&x,&y);
low=x;high=y;
while (low<=high){
mid=(low+high)/2;
if (s1[mid-1]-s1[x-1] < s2[mid]-s2[y+1]){p=mid; low=mid+1;}
else {high=mid-1;}
}
c1=ss1[p-1]-ss1[x-1]-s1[x-1]*(p-x);
c2=ss2[p+1]-ss2[y+1]-s2[y+1]*(y-p);
printf("%d %lld\n",p,c1+c2);
}
return 0;
}