Pagini recente » Cod sursa (job #662970) | Cod sursa (job #1079662) | Cod sursa (job #1632806) | Cod sursa (job #2911479) | Cod sursa (job #261081)
Cod sursa(job #261081)
#include<stdio.h>
#define NMAX 250001
long long A[NMAX],B[NMAX],S1[NMAX],S2[NMAX];
char s[NMAX*5];
int Q;
void reading_init()
{
int N;
scanf("%d %d\n",&N,&Q);
gets( s );//, sizeof( s ), stdin );
int p,i=1,a1;
for(p=0,a1=0; s[p]!=NULL; ++p)
{
if( s[p]==' ' )
{
S1[i]=S1[i-1]+a1;
A[i]=A[i-1]+S1[i-1];
S2[i]=a1;
++i;
a1=0;
}
else
{
a1*=10;
a1+=s[p]-'0';
}
}
S1[i]=S1[i-1]+a1;
A[i]=A[i-1]+S1[i-1];
S2[i]=a1;
/*
int i,a1;
for(i=1; i<=N; ++i)
{
scanf("%d ",&a1);
}
*/
i=N;
while( i )
{
S2[i]+=S2[i+1];
B[i]=B[i+1]+S2[i+1];
--i;
}
}
void solve()
{
int inc,sf,mij,pos,P1,P2;
long long T1,T2;
int M=Q;
while( M-- )
{
scanf("%d %d\n",&P1,&P2);
inc=P1;sf=P2;
while( inc<=sf )
{
mij=(inc+sf)>>1;
if( S1[mij-1]-S1[P1-1] < S2[mij]-S2[P2+1] )
{
pos=mij;
inc=mij+1;
}
else
sf=mij-1;
}
T1=A[pos]-A[P1-1]-S1[P1-1]*(pos-P1+1);
T2=B[pos]-B[P2+1]-S2[P2+1]*(P2-pos+1);
printf("%d %lld\n",pos,T1+T2);
}
}
int main()
{
freopen("cuburi2.in","rt",stdin);
freopen("cuburi2.out","wt",stdout);
reading_init();
solve();
return 0;
}