Pagini recente » Cod sursa (job #1666827) | Cod sursa (job #2057774) | Cod sursa (job #2856657) | Cod sursa (job #2225632) | Cod sursa (job #2080313)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("orase2.in");
ofstream g("orase2.out");
int v[250001],n,m;
long long st[250001],dr[250001],sum1[250001],sum2[250001];
const int L=19;
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;
}