Pagini recente » Cod sursa (job #1838547) | Cod sursa (job #2196100) | Cod sursa (job #1618841) | Cod sursa (job #860595) | Cod sursa (job #2783218)
#include <bits/stdc++.h>
using namespace std;
ifstream in("cuburi2.in");
ofstream out("cuburi2.out");
long long n,m,x,y;
int sp[250001],sd[250001],v[250001],s1[250001],s2[250001];
int st,dr,mij,i;
int main()
{
in>>n>>m;
for(i=1;i<=n;i++)
{
in>>v[i];
sd[i]=sd[i-1]+v[i];
}
for(i=n;i>=1;i--)
{
sp[i]=sp[i+1]+v[i];
}
for(i=1;i<=n;i++)
{
s1[i]=s1[i-1]+sd[i-1];
}
for(i=n;i>=1;i--)
{
s2[i]=s2[i+1]+sp[i+1];
}
for(i=1;i<=m;i++)
{
in>>x>>y;
int st = x, dr = y, pos = x;
while(st <= dr){
int mij = (st + dr) / 2;
if(sd[mij - 1] - sd[x - 1] < sd[y] - sd[mij - 1]){
st = mij + 1;
pos = mij;
}
else dr = mij - 1;
}
long long Sol = s1[pos] - s1[x] - sd[x - 1] * (pos - x);
Sol = Sol + s2[pos] - s2[y] - sp[y + 1] * (y - pos);
out<<pos<<' '<<Sol<<'\n';
}
return 0;
}