Pagini recente » Cod sursa (job #355551) | Cod sursa (job #1134239) | Cod sursa (job #180569) | Istoria paginii utilizator/teodorobert | Cod sursa (job #2783223)
#include <bits/stdc++.h>
using namespace std;
ifstream in("cuburi2.in");
ofstream out("cuburi2.out");
long long n,m,x,y,p,cost;
long long ss[250001],sd[250001],v[250001],sp1[250001],sp2[250001];
long long 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--)
{
ss[i]=ss[i+1]+v[i];
}
for(i=1;i<=n;i++)
{
sp1[i]=sp1[i-1]+sd[i-1];
}
for(i=n;i>=1;i--)
{
sp2[i]=sp2[i+1]+ss[i+1];
}
for(i=1;i<=m;i++)
{
in>>x>>y;
st=x;
dr=y;
p=x;
while(st<=dr)
{
mij=(st+dr)/2;
if(sd[mij-1]-sd[x-1]<sd[y]-sd[mij-1])
{
st=mij+1;
p=mij;
}
else
dr=mij-1;
}
cost=sp1[p]-sp1[x]-sd[x-1]*(p-x)+sp2[p]-sp2[y]-ss[y+1]*(y-p);
out<<p<<' '<<cost<<'\n';
}
return 0;
}