Pagini recente » Cod sursa (job #2269025) | Cod sursa (job #103319) | Cod sursa (job #862545) | Cod sursa (job #1581324) | Cod sursa (job #2253731)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("cuburi2.in");
ofstream out("cuburi2.out");
#define int long long
const int maxn = 250005;
int distdr[maxn];
int dist[maxn];
int sp[maxn];
int v[maxn];
int n;
void solve()
{
int x, y;
in >> x >> y;
int aux = (sp[y] - sp[x - 1]) / 2;
int st = x;
int dr = y;
int med = 0;
while(st <= dr)
{
int mij = (st + dr) / 2;
if(sp[mij - 1] - sp[x - 1] <= aux)
{
med = mij;
st = mij + 1;
}
else
dr = mij - 1;
}
out << med << " ";
out << dist[med] - (dist[x] + sp[x - 1] * (med - x)) + distdr[med] - (distdr[y] + (sp[n] - sp[y]) * (y - med)) << "\n";
/// stanga fara cele din stanga + dreapta fara cele din dreapta
}
int32_t main()
{
int m;
in >> n >> m;
for(int i = 1; i <= n; i++)
{
in >> v[i];
sp[i] = sp[i - 1] + v[i];
}
for(int i = 1; i <= n; i++)
dist[i] = dist[i - 1] + sp[i - 1];
for(int i = n; i >= 1; i--)
distdr[i] = distdr[i + 1] + (sp[n] - sp[i]);
for(int i = 1; i <= m; i++)
solve();
return 0;
}