Pagini recente » Cod sursa (job #3249181) | Cod sursa (job #2613889) | Cod sursa (job #2411552) | Cod sursa (job #489408) | Cod sursa (job #981265)
Cod sursa(job #981265)
#include<fstream>
#define N 250100
using namespace std;
ifstream f("cuburi2.in");
ofstream g("cuburi2.out");
long long S1[N],S2[N],Ss[N],Sd[N],A[N],i,st,dr,m,n,mij,sol,x,y;
long long solve(int po)
{
return S1[po-1]-S1[x-1]-(po-x)*Ss[x-1]+S2[po+1]-S2[y+1]-(y-po)*Sd[y+1];
}
int main()
{
f>>n>>m;
for(i=1;i<=n;++i)
{
f>>A[i];
Ss[i]=A[i]+Ss[i-1];
}
for(i=1;i<=n;++i)
S1[i]=Ss[i]+S1[i-1];
for(i=n;i>=1;--i)
{
Sd[i]=A[i]+Sd[i+1];
}
for(i=n;i>=1;--i)
S2[i]=S2[i+1]+Sd[i];
while(m--)
{
f>>x>>y;
if(x==y)
{
g<<x<<" "<<0;
continue;
}
if(x==y+1||y==x+1)
{
if(A[x]<A[y])
g<<y<<" "<<A[x];
else
g<<x<<" "<<A[y];
continue;
}
st=x;dr=y;
sol=x;
while(st<=dr)
{
mij=(st+dr)>>1;
if(Ss[mij-1]-Ss[x-1]<Ss[y]-Ss[mij-1])
{
st=mij+1;
sol=mij;
}
else
dr=mij-1;
}
g<<sol<<" "<<solve(sol)<<"\n";
}
return 0;
}