Pagini recente » Cod sursa (job #2483147) | Cod sursa (job #917129) | Cod sursa (job #2899428) | Cod sursa (job #2899429) | Cod sursa (job #2005677)
#include<cstdio>
using namespace std;
const int nmax=250005;
long long v[nmax],spdr[nmax],sp[nmax],mutdr[nmax],mutst[nmax];
inline int bsearch(int st,int dr)
{
int i,step;
for(step=1;step<=dr-st+1;step<<=1);
for(i=st;step;step>>=1)
if(i+step<=dr && sp[i+step-1] - sp[st-1] <= sp[dr] - sp[i+step-1])
i+=step;
return i;
}
int main()
{
freopen("cuburi2.in","r",stdin);
freopen("cuburi2.out","w",stdout);
int x,y,n,i,j,q;
scanf("%d%d",&n,&q);
for(i=1;i<=n;++i)
{
scanf("%lld",&v[i]);
sp[i]=sp[i-1]+v[i];
mutdr[i]=mutdr[i-1] +sp[i-1];
}
for(i=n;i;--i)
{
spdr[i]=spdr[i+1] + v[i];
mutst[i]=mutst[i+1] + spdr[i+1];
}
while(q--)
{
scanf("%d%d",&x,&y);
int poz=bsearch(x,y);
long long s1,s2;
s1=1LL*mutdr[poz] - mutdr[x] - sp[x-1]*(poz-x);
s2=1LL*mutst[poz] - mutst[y] - spdr[y+1]*(y-poz);
s1+=s2;
printf("%d %lld\n",poz,s1);
}
}