Pagini recente » Monitorul de evaluare | What is title? we don't even | Cod sursa (job #2233338) | Istoria paginii utilizator/supermarket8234 | Cod sursa (job #257425)
Cod sursa(job #257425)
#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], b2[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 - 1];
}
int s = 0;
for (i = n; i; --i)
{
b[i] = b[i + 1] + a[i];
b2[i] = b2[i + 1] + b[i + 1];
}
for (; m; --m)
{
scanf("%d %d", &x, &y);
poz = x;
search(x, y);
printf("%d %lld\n", poz, (f2[poz] - f2[x - 1] - f[x - 1] * (poz - x + 1)) + (b2[poz] - b2[y + 1] - b[y + 1] * (y - poz + 1)));
}
}