Pagini recente » Cod sursa (job #3133488) | Cod sursa (job #2301216) | Cod sursa (job #1841576) | Cod sursa (job #575268) | Cod sursa (job #1182636)
#include <iostream>
#include <cstdio>
#include <algorithm>
#define NMAX 250001
#define ll long long
using namespace std;
ll n,m,poz,x,y;
ll v[NMAX],nl[NMAX],nr[NMAX],cl[NMAX],cr[NMAX];
int f(int left,int right)
{
int mid;
if (left>right)
return 0;
mid=(left+right)/2;
if (nl[mid-1]-nl[x-1]<nl[y]-nl[mid-1])
{
poz=mid;
return f(mid+1,right);
}
else
return f(left,mid-1);
}
int main()
{
ll i,ml,mr;
freopen("cuburi2.in","r",stdin);
freopen("cuburi2.out","w",stdout);
cin>>n>>m;
for (i=1;i<=n;i++)
{
cin>>v[i];
nl[i]=nl[i-1]+v[i];
cl[i]=cl[i-1]+nl[i-1];
}
for (i=n;i;i--)
{
nr[i]=nr[i+1]+v[i];
cr[i]=cr[i+1]+nr[i+1];
}
while(m)
{
cin>>x>>y;
if (x>y)
swap(x,y);
f(x,y);
ml=cl[poz]-(poz-x)*nl[x-1]-cl[x];
mr=cr[poz]-(y-poz)*nr[y+1]-cr[y];
cout<<poz<<" "<<ml+mr<<"\n";
m--;
}
return 0;
}