Pagini recente » Cod sursa (job #1214431) | Cod sursa (job #3286158) | Cod sursa (job #1764529) | Cod sursa (job #2647487) | Cod sursa (job #2822544)
#include <fstream>
using namespace std;
ifstream fin("cuburi2.in");
ofstream fout("cuburi2.out");
const int maxN = 250005;
int n, q;
long long v[maxN], sp_st[maxN], sp_dr[maxN], c_st[maxN], c_dr[maxN];
int main()
{
fin >> n >> q;
for(int i = 1; i <= n; i++)
{
fin >> v[i];
sp_st[i] = v[i] + sp_st[i - 1];
c_st[i] = c_st[i - 1] + sp_st[i - 1];
}
for(int i = n; i >= 1; i--)
{
sp_dr[i] = v[i] + sp_dr[i + 1];
c_dr[i] = c_dr[i + 1] + sp_dr[i + 1];
}
for(int i = 1; i <= q; i++)
{
int a, b, maxi = 1, poz;
fin >> a >> b;
while(maxi * 2 <= (b - a))
maxi = maxi * 2;
poz = a;
for(int i = maxi; i > 0; i >>= 1)
{
if(poz + i <= b && ((sp_st[poz + i - 1] - sp_st[a - 1]) < (sp_dr[poz + i + 1] - sp_dr[b + 1])))
poz = poz + i;
}
if((sp_st[poz] - sp_st[a - 1]) - (sp_dr[poz + 2] - sp_dr[b + 1]) < ((sp_dr[poz + 1] - sp_dr[b + 1]) - (sp_st[poz - 1] - sp_st[a - 1])))
poz++;
long long cost;
cost = (c_st[poz] - c_st[a - 1] - (poz - a + 1) * sp_st[a - 1]) + (c_dr[poz] - c_dr[b + 1] - (b - poz + 1) * sp_dr[b + 1]);
fout << poz << ' ' << cost << '\n';
}
return 0;
}