Pagini recente » Istoria paginii utilizator/sutoagoston | Istoria paginii utilizator/remusmp | Monitorul de evaluare | Istoria paginii runda/soft-contest/clasament | Cod sursa (job #2156883)
#include <bits/stdc++.h>
#define N 250005
using namespace std;
ifstream in("cuburi2.in");
ofstream out("cuburi2.out");
int arr[N];
long long X1[N],X2[N];
long long Y1[N],Y2[N];
int p,x,y;
void src(int a,int b)
{
int m;
while(a<=b)
{
m=(a+b)>>1;
if(X2[m-1]-X2[x-1]<X2[y]-X2[m-1])
{
p=m;
a=m+1;
}
else
b=m-1;
}
}
int main()
{
int n,k,i;
long long st,dr;
in>>n>>k;
for(i=1;i<=n;++i)
{
in>>arr[i];
X2[i]=X2[i-1]+arr[i];
X1[i]=X1[i-1]+X2[i-1];
}
for(i=n;i>0;--i)
{
Y2[i]=Y2[i+1]+arr[i];
Y1[i]=Y1[i+1]+Y2[i+1];
}
while(k--)
{
in>>x>>y;
p=x;
src(x,y);
st=X1[p]-X1[x-1]-X2[x-1]*(p-x+1);
dr=Y1[p]-Y1[y+1]-Y2[y+1]*(y-p+1);
out<<p<<" "<<st+dr<<"\n";
}
return 0;
}