Pagini recente » Cod sursa (job #2015282) | Cod sursa (job #339852) | Cod sursa (job #1880198) | Cod sursa (job #1160769) | Cod sursa (job #1334044)
#include <iostream>
#include <fstream>
using namespace std;
ofstream out("cuburi2.out");
int numere[250001];
void rez(int x,int y)
{
long long bun,acum=(x+y/2),pret=99999999999,stanga,dreapta,i;
int a=x,b=y;
while (a<=b)
{
stanga=0;
dreapta=0;
for (i=x;i<acum;i++)
{
stanga+=(acum-i)*numere[i];
}
for (i=y;i>acum;i--)
{
dreapta+=(i-acum)*numere[i];
}
if (stanga+dreapta<pret)
{
pret=1LL*(stanga+dreapta);
bun=acum;
}
if (stanga>=dreapta)
{
b=acum-1;
acum=(a+b)/2;
}
else
{
a=acum+1;
acum=(a+b)/2;
}
}
out<<bun<<" "<<pret<<"\n";
}
int main()
{
ifstream in("cuburi2.in");
int i,n,m,x,y;
in>>n;
in>>m;
for (i=1;i<=n;i++)
{
in>>numere[i];
}
for (i=1;i<=m;i++)
{
in>>x;
in>>y;
rez(x,y);
}
return 0;
}