Pagini recente » Cod sursa (job #2278757) | Cod sursa (job #2655103) | Cod sursa (job #1571460) | Cod sursa (job #1877885) | Cod sursa (job #3342095)
#include <fstream>
using namespace std;
ifstream fin("cuburi2.in");
ofstream fout("cuburi2.out");
const int Nmax = 250000 + 5;
int v[Nmax], n, m;
long long sp[Nmax], pre[Nmax], suf[Nmax];
int main()
{
int i;
fin >> n >> m;
for ( i = 1; i <= n; ++i )
{
fin >> v[i];
sp[i] = sp[i - 1] + v[i];
pre[i] = pre[i - 1] + sp[i];
}
long long sum = 0;
for ( i = n; i >= 1; --i )
{
sum += v[i];
suf[i] = suf[i + 1] + sum;
}
for ( i = 1; i <= m; ++i )
{
int st, dr, mij, x, y, sol = -12;
fin >> x >> y;
st = x;
dr = y;
long long s = (sp[dr] - sp[st - 1]) / 2;
while ( st <= dr )
{
mij = (st + dr) / 2;
if ( sp[mij] - sp[x - 1] <= s )
{
sol = mij;
st = mij + 1;
}
else
dr = mij - 1;
}
long long cand1 = pre[sol - 1] - pre[x - 1] + suf[sol + 1] - suf[y + 1];
++sol;
long long cand2 = pre[sol - 1] - pre[x - 1] + suf[sol + 1] - suf[y + 1];
if ( cand1 < cand2 )
fout << sol - 1 << " " << cand1 << '\n';
else
fout << sol << " " << cand2 << '\n';
}
return 0;
}