Pagini recente » Cod sursa (job #921761) | Cod sursa (job #689195) | Cod sursa (job #349515) | Cod sursa (job #601789) | Cod sursa (job #2864681)
#include <bits/stdc++.h>
#define din cin
#define dout out
#define pi 3.14159265359
#define sw(x,y) x^=y,y^=x,x^=y
#define bmin(a,b)((a<b)?(a):(b))
#define bmax(a,b)((a>b)?(a):(b))
#define bminify(a,b)a=bmin(a,b)
#define bmaxify(a,b)a=bmax(a,b)
#define forq(i,ii,n)for(i=ii;i<n;i++)
using namespace std;
typedef long long ll;
ifstream in("cuburi2.in");
ofstream out("cuburi2.out");
ll n,m,i,j,a[250002],b[250002],c[250002],d[250002],e[250002],x,y,ee,ff,o,s=LLONG_MAX;
ll f(ll q){return c[q]-c[x]-b[x-1]*(q-x)+e[q]-e[y]-d[y+1]*(y-q);}
int main()
{
in>>n>>m;
for(i=1;i<=n;i++)
in>>a[i],c[i]=c[i-1]+b[i-1],b[i]=b[i-1]+a[i];
for(i=n;i>=0;i--)e[i]=e[i+1]+d[i+1],d[i]=d[i+1]+a[i];
while(m--)
{
in>>x>>y;
ee=x,ff=y,s=LLONG_MAX;
while(ee!=ff)
{
o=(ee+ff)/2;
//cout<<ee<<' '<<ff<<' '<<o<<' '<<f(o)<<'\n';
s=bmin(s,f(o));
if(o>x)
if(f(o-1)<s)
ff=o;
else ee=o;
else ee=o;
if(o<y&&ee<=o)
if(f(o+1)<s)
ee=o+1;
else ff=o;
else ff=o;
}
o=(ee+ff)/2;
s=bmin(s,f(o));
out<<ee<<' '<<s<<'\n';
}
}