Pagini recente » Cod sursa (job #1395152) | Cod sursa (job #233572) | Cod sursa (job #664435) | Cod sursa (job #2646226) | Cod sursa (job #2862555)
#include <fstream>
#define nmax 250000
#define int long long
using namespace std;
const int inf = 1e17;
int v[nmax + 1], st[nmax + 1], sp[nmax + 1], dr[nmax + 1];
signed main()
{
ifstream cin ("cuburi2.in");
ofstream cout ("cuburi2.out");
int n, m, i, q, a, b, j, act, tot, stt, drr, mij, sol;
cin >> n >> m;
for (i = 1; i <= n; i++)
cin >> v[i], sp[i] = sp[i - 1] + v[i];
st[1] = v[1];
for (i = 2; i <= n; i++)
st[i] = st[i - 1] + sp[i];
dr[n] = v[n];
for (i = n - 1; i >= 1; i--)
dr[i] = dr[i + 1] + (sp[n] - sp[i - 1]);
for (i = 1; i <= m; i++)
{
cin >> a >> b;
tot = sp[b] - sp[a - 1];
stt = a, drr = b, sol = a;
while (stt <= drr)
{
mij = (stt + drr) / 2;
if (sp[mij] - sp[a - 1] >= tot / 2)
sol = mij, drr = mij - 1;
else
stt = mij + 1;
}
act = st[sol - 1] - st[a - 1] - (sol - a) * sp[a - 1] + dr[sol + 1] - (b - sol) * (sp[n] - sp[b]) - dr[b + 1];
cout << sol << " " << act << '\n';
}
return 0;
}