Pagini recente » Statistici tofan anastasia (nastika) | Cod sursa (job #1305598) | Cod sursa (job #1880649) | Cod sursa (job #1872392) | Cod sursa (job #1385928)
#include <cstdio>
#include <fstream>
#define DIM 8192
#define Max_Size 250010
using namespace std;
ifstream fin ("cuburi2.in");
int N, M;
long long V[Max_Size], ST[Max_Size], DR[Max_Size];
char P[DIM+16], *now;
inline void Verify()
{
if (*now == '\0')
{
fin.get(P, DIM, '\0');
now = P;
}
}
inline int Get_Num()
{
while (*now < '0' || *now > '9')
{
now++;
Verify();
}
int number = 0;
while (*now >= '0' && *now <= '9')
{
number = number * 10 + *now - '0';
now++;
Verify();
}
return number;
}
inline long long Calc_Val(int st, int dr, int midle)
{
long long v_left = ST[midle - 1] - ST[st - 1] - (V[st - 1] * (midle - st));
long long v_right = DR[midle + 1] - DR[dr + 1] - ((V[N] - V[dr]) * (dr - midle));
return v_left + v_right;
}
int main()
{
freopen("cuburi2.out", "w", stdout);
now = P;
Verify();
N = Get_Num();
M = Get_Num();
for (int i = 1; i <= N; i++)
{
V[i] = Get_Num();
V[i] = V[i] + V[i-1];
}
for (int i = 1; i <= N; i++) {
ST[i] = ST[i-1] + V[i];
}
for (int i = N; i >= 1; i--) {
DR[i] = DR[i+1] + V[N] - V[i-1];
}
int x, y, p, u, mij, sol;
while (M--)
{
x = Get_Num();
y = Get_Num();
p = x;
u = y;
while (p <= u)
{
mij = (p + u) / 2;
if (V[mij] - V[x - 1] >= V[y] - V[mij])
{
sol = mij;
u = mij - 1;
}
else
{
p = mij + 1;
}
}
printf("%d %lld\n", sol, Calc_Val(x, y, sol));
}
return 0;
}