Pagini recente » Borderou de evaluare (job #2956335) | Borderou de evaluare (job #1231202) | Borderou de evaluare (job #1859539) | Borderou de evaluare (job #1275724) | Cod sursa (job #2128696)
#include <iostream>
#include <fstream>
#define max 250005
using namespace std;
ifstream fin("cuburi2.in");
ofstream fout("cuburi2.out");
long long s[max],r[max],l[max],mx,r1,r2,h;
int n,m,x,y,i,dr,st,mid,pos;
int main() {
fin>>n>>m;
for(i=1;i<=n;i++)
{
fin>>r[i];
s[i]=s[i-1]+r[i];
l[i]=l[i-1]+i*r[i];
}
for(i=n;i>=1;i--)
r[i]=r[i+1]+r[i]*(n-i+1);
while(m)
{
m--;
fin>>x>>y;
st=x; dr=y;
while(st<=dr)
{
mid=st+(dr-st)/2;
if(s[mid]-s[x-1]>=s[y]-s[mid]) dr=mid-1;
else st=mid+1;
}
pos=mid;
mx=r[x]-r[mid]-(n-mid+1)*(s[mid-1]-s[x-1])+l[y]-l[mid]-mid*(s[y]-s[mid]);
r2=r[x]-r[mid+1]-(n-mid)*(s[mid]-s[x-1])+l[y]-l[mid+1]-(mid+1)*(s[y]-s[mid+1]);
r1=r[x]-r[mid-1]-(n-mid+2)*(s[mid-2]-s[x-1])+l[y]-l[mid-1]-(mid-1)*(s[y]-s[mid-1]);
if(r2<mx&&mid+1<=y)
{ mx=r2; pos=mid+1; }
if(r1<mx&&mid-1>=x)
{ mx=r1; pos=mid-1; }
fout<<pos<<" "<<mx<<"\n";
}
}