Pagini recente » Cod sursa (job #180317) | Cod sursa (job #2684029) | Cod sursa (job #1448883) | Cod sursa (job #2255207) | Cod sursa (job #1385869)
#include <fstream>
#define Max_Size 250010
using namespace std;
ifstream fin ("cuburi2.in");
ofstream fout ("cuburi2.out");
int N, M, V[Max_Size], ST[Max_Size], DR[Max_Size];
int Calc_Val(int st, int dr, int midle)
{
int v_left = ST[midle - 1] - ST[st - 1] - (V[st - 1] * (midle - st));
int v_right = DR[midle + 1] - DR[dr + 1] - ((V[N] - V[dr]) * (dr - midle));
return v_left + v_right;
}
int main()
{
fin >> N >> M;
for (int i = 1; i <= N; i++)
{
fin >> V[i];
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];
}
for (int i = 1; i <= M; i++)
{
int x, y, p, u, mij, sol;
fin >> x >> y;
p = x;
u = y;
while (p < u)
{
mij = (p + u) / 2;
if (Calc_Val(x, y, mij) <= Calc_Val(x, y, mij + 1))
{
sol = mij;
u = mij;
}
else
{
sol = mij + 1;
p = mij + 1;
}
}
fout << sol << ' ' << Calc_Val(x, y, sol) << '\n';
}
fout.close();
return 0;
}