Pagini recente » Cod sursa (job #1785320) | Cod sursa (job #987136) | Cod sursa (job #132987) | Cod sursa (job #182584) | Cod sursa (job #2838846)
#include <bits/stdc++.h>
using namespace std;
ifstream in("cuburi2.in");
ofstream out("cuburi2.out");
long long n,m,sp[250005],v2[250005],v1[250005],a[250005];
long long S(int p,int x,int y)
{
long long s1,s2,s;
s1 = v1[x] - v1[p] - 1ll * (n - p + 1) * (sp[p - 1] - sp[x - 1]);
s2 = v2[y] - v2[p] - 1ll * p * (sp[y] - sp[p]);
s = s1 + s2;
return s;
}
int main()
{
in >> n >> m;
for (int i = 1; i <= n; i++)
{
int x;
in >> x;
a[i] = x;
sp[i] = sp[i - 1] + x;
v2[i] = v2[i - 1] + 1ll * x * i;
}
for (int i = n; i >= 1; i--)
v1[i] = v1[i + 1] + 1ll * a[i] * (n - i + 1);
for (int i = 1; i <= m; i++)
{
int st,dr,mij;
in >> st >> dr;
int x = st,y = dr;
while (st < dr)
{
mij = (st + dr) / 2;
if (S(mij,x,y) <= S(mij - 1,x,y) and S(mij,x,y) < S(mij + 1,x,y))
{
st = mij;
break;
}
else if (S(mij - 1,x,y) > S(mij,x,y))
st = mij + 1;
else
dr = mij - 1;
}
out << st << " " << S(st,x,y) << '\n';
}
return 0;
}