Pagini recente » Cod sursa (job #1356027) | Cod sursa (job #1734317) | Cod sursa (job #1127077) | Cod sursa (job #134231) | Cod sursa (job #2607881)
#include <bits/stdc++.h>
using namespace std;
ifstream f("cuburi2.in");
ofstream g("cuburi2.out");
int n, m;
long long stanga[250005], dreapta[250005], cstanga[250005], cdreapta[250005];
int poz;
int v[250005];
void Read()
{
f>>n>>m;
for(int i = 1;i <= n;++i)
{
f>>v[i];
stanga[i] = stanga[i - 1] + v[i];
cstanga[i] = stanga[i - 1] + cstanga[i - 1];
}
for(int i = n;i >= 1;--i)
{
dreapta[i] = dreapta[i + 1] + v[i];
cdreapta[i] = cdreapta[i + 1] + dreapta[i + 1];
}
}
int binar(int l, int r)
{
int poz = l, mid;
int x = l, y = r;
while(l <= r)
{
mid = (l + r) >> 1;
if(stanga[mid - 1] - stanga[x - 1] < stanga[y] - stanga[mid - 1])
l = mid + 1, poz = mid;
else
r = mid - 1;
}
return poz;
}
void Solve()
{
int x, y;
long long cost_st, cost_dr;
for(int i = 1;i <= m;++i)
{
f>>x>>y;
int poz = binar(x, y);
long long cost_st, cost_dr;
cost_st = cstanga[poz] - cstanga[x - 1] - stanga[x - 1] * (poz - x + 1);
cost_dr = cdreapta[poz] - cdreapta[y + 1] - dreapta[y + 1] * (y - poz + 1);
g<<poz<<" "<<cost_st + cost_dr<<'\n';
}
}
int main()
{
Read();
Solve();
return 0;
}