Pagini recente » Cod sursa (job #3238130) | Cod sursa (job #2727402) | Cod sursa (job #2131977) | Cod sursa (job #3163211) | Cod sursa (job #260927)
Cod sursa(job #260927)
#include <cstdio>
#define lm 250010
int n, m, p, x, y;
long long s[lm], s2[lm], v[lm], v2[lm];
int caut (int a, int b, long long k1, long long k2)
{
int m, r;
while (a<=b)
{
m=(a+b)/2;
if (s[m]-k1>=s2[m]-k2)
{
r=m;
b=m-1;
} else a=m+1;
}
return r;
}
int main()
{
freopen("cuburi2.in","r",stdin);
freopen("cuburi2.out","w",stdout);
scanf("%d %d",&n,&m);
int i;
long long t=0;
for (i=1; i<=n; i++)
{
scanf("%d",&v[i]);
t+=v[i];
}
for (i=1; i<=n; i++)
{
s[i]=s[i-1]+v[i];
s2[i]=t-s[i];
}
for (i=1; i<=n; i++) v[i]=v[i-1]+s[i-1];
for (i=n; i>0; i--) v2[i]=v2[i+1]+s2[i];
for (i=1; i<=m; i++)
{
scanf("%d %d",&x,&y);
p=caut(x,y,s[x-1],s2[y]);
printf("%d %lld\n",p,v[p]-v[x]-s[x-1]*(p-x)+v2[p]-v2[y]-s2[y]*(y-p));
}
}