Pagini recente » Cod sursa (job #259867) | Cod sursa (job #918384) | Cod sursa (job #2160050) | Rating Ungureanu Vlad Gabriel (VladUng) | Cod sursa (job #819401)
Cod sursa(job #819401)
#include<fstream>
#define ll long long
using namespace std;
int n,m,x,y,st,dr,st2,dr2;
ll sum[250007],s[250007],a[250007],b[250007];
ifstream fin("cuburi2.in");
ofstream fout("cuburi2.out");
inline int cb(ll k1,ll k2)
{
int med=0,last=0;
while (st<=dr)
{
med=st+(dr-st)/2;
if (sum[med]-k1>=s[med]-k2)
{
last=med;
dr=med-1;
}
else
st=med+1;
}
return last;
}
int main()
{
fin >> n >> m;
ll max=0,min=0,min2;
for (int i=1;i<=n;++i)
{
fin >> a[i];
max+=a[i];
}
//sume partiale
for (int i=1;i<=n;++i)
{
sum[i]=sum[i-1]+a[i];
s[i]=max-sum[i];
}
for (int i=1;i<=n;++i)
a[i]=a[i-1]+sum[i-1];
for (int i=n;i>0;--i)
b[i]=b[i+1]+s[i];
for (int i=1;i<=m;i++)
{
fin >> st >> dr;
st2=st;
dr2=dr;
min=cb(sum[st2-1],s[dr2]);
st=st2;
dr=dr2;
min2=(ll)a[min]-a[st]-sum[st-1]*(min-st)+b[min]-b[dr]-s[dr]*(dr-min);
fout << min << " ";
fout << min2 << "\n";
}
}