Pagini recente » Cod sursa (job #483003) | Cod sursa (job #504372) | Cod sursa (job #1108749) | Cod sursa (job #680045) | Cod sursa (job #2254945)
#include <cstdio>
using namespace std;
long long sp[250005];
long long stt[250005];
long long drr[250005];
int main()
{ freopen("cuburi2.in", "r",stdin);
freopen("cuburi2.out", "w",stdout);
int n,m,i,x,y,st,dr,last,med;
scanf("%d%d", &n, &m);
for(i=1; i<=n; i++){
scanf("%d", &x);
sp[i]=sp[i-1]+x;
stt[i]=stt[i-1]+sp[i];
}
for(i=n; i>=1; i--)
drr[i]=drr[i+1]+sp[n]-sp[i-1];
for(i=1; i<=m; i++){
scanf("%d%d", &st, &dr);
x=st,y=dr,last=x;
while(st<=dr){
med=(st+dr)/2;
if(sp[med-1]-sp[x-1]<sp[y]-sp[med-1]){
last=med;
st=med+1;
}
else
dr=med-1;
}
printf("%d %lld\n", last, stt[last-1]-stt[x-1]-sp[x-1]*(last-x)+drr[last+1]-drr[y+1]-(sp[n]-sp[y])*(y-last));
}
return 0;
}