Pagini recente » Cod sursa (job #1054865) | Cod sursa (job #543129) | Cod sursa (job #386075) | Cod sursa (job #1041497) | Cod sursa (job #2080321)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("cuburi2.in");
ofstream g("cuburi2.out");
const int L=19,K=250000;
int v[1+K+1],n,m;
long long st[1+K+1],dr[1+K+1],sum1[1+K+1],sum2[1+K+1];
long long cost(int i, int j)
{
long long cost=0;
if(i<j)
cost=st[j]-st[i]-(j-i)*sum1[i-1];
else
cost=dr[j]-dr[i]-(i-j)*sum2[i+1];
return cost;
}
int main()
{
int x,y,i,r,pas;
f>>n>>m;
for(i=1;i<=n;i++)
{
f>>v[i];
sum1[i]=sum1[i-1]+v[i];
st[i]=st[i-1]+sum1[i-1];
}
for(i=n;i>=1;i--)
{
sum2[i]=sum2[i+1]+v[i];
dr[i]=dr[i+1]+sum2[i+1];
}
for(i=1;i<=m;i++)
{
f>>x>>y;
pas=1<<L;
r=0;
while(pas!=0)
{
if(cost(x,x+r+pas)+cost(y,x+r+pas)<=cost(x,x+r+pas-1)+cost(y,x+r+pas-1) && x+r+pas<=y)
r=r+pas;
pas=pas/2;
}
g<<x+r<<' '<<cost(x,x+r)+cost(y,x+r)<<'\n';
}
return 0;
}