Pagini recente » Cod sursa (job #1588053) | Cod sursa (job #2935518) | Cod sursa (job #652186) | Cod sursa (job #2227431) | Cod sursa (job #1891187)
#include <cstdio>
#define NMax 250005
#define ll long long
ll spec[2][NMax+1];
ll sum[2][NMax+1];
int v[NMax+1];
int main(){
FILE* fin = fopen("cuburi2.in","r");
FILE* fout = fopen("cuburi2.out","w");
int i,N,T,X,Y,st,dr,mid,pos;
ll left,right;
fscanf(fin,"%d %d",&N,&T);
for(i = 1; i <= N; ++i) fscanf(fin,"%d",&v[i]);
for(i = 1; i <= N; ++i)
{
sum[0][i] = sum[0][i-1] + v[i];
spec[0][i] = spec[0][i-1] + sum[0][i-1];
}
for(i = N; i >= 1; --i)
{
sum[1][i] = sum[1][i+1] + v[i];
spec[1][i] = spec[1][i+1] + sum[1][i+1];
}
while(T--)
{
fscanf(fin,"%d %d",&X,&Y);
for(pos = st = X, dr = Y-1; st <= dr; )
{
mid = (st+dr)/2;
if(sum[0][mid]-sum[0][X-1] >= sum[0][Y]-sum[0][mid]) dr = mid-1;
else{ pos = mid+1; st = mid+1; }
}
left = spec[0][pos] - spec[0][X] - (pos-X) * sum[0][X-1];
right = spec[1][pos] - spec[1][Y] - (Y-pos) * sum[1][Y+1];
fprintf(fout,"%d %lld\n",pos,left+right);
}
return 0;
}