Pagini recente » Cod sursa (job #330484) | Cod sursa (job #2694327) | Cod sursa (job #41660) | Cod sursa (job #397597) | Cod sursa (job #270342)
Cod sursa(job #270342)
# include <stdio.h>
# define N 250002
long long a[N],A[N],b[N],B[N],st,dr;
int i,v[N],n,m,x,y,nr;
int BS(int i, int j)
{ int m,P=i;
while (i<=j) {
m=(i+j)>>1;
if (A[m-1]-A[x-1]<A[y]-A[m-1]){
i=m+1; P=m;
}
else j=m-1;
}
return P;
}
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 ",&v[i]);
a[i]=a[i-1]+v[i];
A[i]=A[i-1]+a[i-1];
}
for (i=n;i>=1;--i){
b[i]=b[i+1]+v[i];
B[i]=B[i+1]+b[i+1];
}
for (i=1;i<=m;++i){
scanf("%d %d",&x,&y);
nr=BS(x,y);
st=A[nr]-A[x-1]-a[x-1]*(nr-x+1);
dr=B[nr]-B[y+1]-b[y+1]*(y-nr+1);
printf("%d %lld\n", nr, st+dr);
}
return 0;
}