Pagini recente » Cod sursa (job #2062206) | Cod sursa (job #660175) | Cod sursa (job #3040393) | Cod sursa (job #2187343) | Cod sursa (job #341208)
Cod sursa(job #341208)
#include <stdio.h>
#define N 250005
int n,m,v[N];
int sum[N],sum2[N],sum3[N];
int x,y,numar;
void precalculate()
{
int i;
for (i=1; i<=n; i++)
{
scanf("%d",&v[i]);
sum[i]=sum[i-1]+v[i];
sum2[i]=sum2[i-1]+sum[i-1];
}
for (i=n; i>=1;i--)
sum3[i]=sum3[i+1]+sum[n]-sum[i];
}
int cbin()
{
int i,step;
for (step=1; step<=y-x+1; step<<=1);
for (i=x-1; step; step>>=1)
if (i+step<=y && sum[i+step]-sum[x-1]<numar)
i+=step;
return ++i;
}
int main()
{
freopen("cuburi2.in","r",stdin);
freopen("cuburi2.out","w",stdout);
scanf("%d%d",&n,&m);
precalculate();
int i,t,rez;
for (i=1; i<=m; i++)
{
scanf("%d%d",&x,&y);
numar=(sum[y]-sum[x-1])/2;
t=cbin();
rez=sum2[t]-sum2[x]-sum[x-1]*(t-x);
rez+=sum3[t]-sum3[y]-(sum[n]-sum[y])*(y-t);
printf("%d %d\n",t,rez);
}
return 0;
}