Pagini recente » Cod sursa (job #2797994) | Cod sursa (job #2606471) | Cod sursa (job #3229887) | Cod sursa (job #1426022) | Cod sursa (job #2127932)
#include <iostream>
#include <fstream>
#include <cmath>
#define ll long long
#define max 250005
using namespace std;
ifstream fin("cuburi2.in");
ofstream fout("cuburi2.out");
ll n,m,x,y,i,j,nr,v[max],s[max],r[max],l[max],dr,st,mid,a,b,pos,mx;
int main() {
fin>>n>>m;
for(i=1;i<=n;i++)
{
fin>>v[i];
s[i]=s[i-1]+v[i];
l[i]=l[i-1]+i*v[i];
}
for(i=n;i>=1;i--)
r[i]=r[i+1]+v[i]*(n-i+1);
while(m)
{
m--;
fin>>x>>y;
mx=r[1]+l[n];
st=x; dr=y;
while(st<=dr)
{
mid=st+(dr-st)/2;
a=r[x]-r[mid]-(n-mid+1)*(s[mid-1]-s[x-1]);
b=l[y]-l[mid]-mid*(s[y]-s[mid]);
if(a+b<mx)
{ mx=a+b; pos=mid; }
if(a>b) dr=mid-1;
if(a<b) st=mid+1;
}
for(mid=pos-2;mid<=pos+2;mid++)
if(mid>=x&&mid<=y)
{
a=r[x]-r[mid]-(n-mid+1)*(s[mid-1]-s[x-1]);
b=l[y]-l[mid]-mid*(s[y]-s[mid]);
if(a+b<mx)
{ mx=a+b; pos=mid; }
}
fout<<pos<<" "<<mx<<"\n";
}
}