Pagini recente » Cod sursa (job #2442323) | Cod sursa (job #1331974) | Cod sursa (job #2538674) | Cod sursa (job #2081905) | Cod sursa (job #260572)
Cod sursa(job #260572)
#include<stdio.h>
#define NMAX 250001
int N,Q;
long long A[NMAX],B[NMAX],V[NMAX],S1[NMAX],S2[NMAX];
void reading_init()
{
scanf("%d%d\n",&N,&Q);
int i;
for(i=1; i<=N; ++i)
{
scanf("%d",&V[i]);
S1[i]=S1[i-1]+V[i];
A[i]=A[i-1]+S1[i-1];
}
for(i=N; i; --i)
{
S2[i]=S2[i+1]+V[i];
B[i]=B[i+1]+S2[i+1];
}
}
void solve()
{
int inc,sf,mij,pos,P1,P2;
long long T1,T2,ANS,sc;
while( Q-- )
{
scanf("%d%d\n",&P1,&P2);
inc=P1;sf=P2;//pos=P1;
//sc=S2[P1]-S2[P2+1]-V[P1];
while( inc<=sf )
{
mij=(inc+sf)>>1;
T1=S1[mij-1]-S1[P1-1];
T2=S2[mij]-S2[P2+1];
if( T1 < T2 )
{
pos=mij;
inc=mij+1;
}
else
sf=mij-1;
}
printf("%d ",pos);
ANS= A[pos]+B[pos] - A[ P1-1 ] - S1[P1-1]*(pos-P1+1) - B[ P2+1 ] - S2[ P2+1 ]*(P2-pos+1);
printf("%lld\n",ANS);
}
}
int main()
{
freopen("cuburi2.in","r",stdin);
freopen("cuburi2.out","w",stdout);
reading_init();
solve();
return 0;
}