Pagini recente » Cod sursa (job #105750) | Monitorul de evaluare | Monitorul de evaluare | Cod sursa (job #1383558) | Cod sursa (job #257400)
Cod sursa(job #257400)
#include <cstdio>
const int MAX_N = 250010;
int n, m, poz, x, y;
int a[MAX_N];
long long f[MAX_N], f2[MAX_N], b[MAX_N];
void search(int st, int dr)
{
while (st <= dr)
{
int m = st + (dr - st) / 2;
if (f[m - 1] - f[x - 1] < f[y] - f[m - 1])
{
st = m + 1;
poz = m;
continue;
}
dr = m - 1;
}
}
int main()
{
int i;
freopen("cuburi2.in", "r", stdin);
freopen("cuburi2.out", "w", stdout);
scanf("%d %d", &n, &m);
for (i = 1; i <= n; ++i)
{
scanf("%d", &a[i]);
f[i] = f[i - 1] + a[i];
f2[i] = f2[i - 1] + f[i];
}
int s = 0;
for (i = n; i; --i)
{
s += a[i];
b[i] = b[i + 1] + s;
}
for (; m; --m)
{
scanf("%d %d", &x, &y);
poz = x;
search(x, y);
printf("%d %d\n", poz, (f2[poz - 1] - f2[x - 1]) + (b[poz + 1] - b[y + 1]));
}
}