Pagini recente » Cod sursa (job #367866) | Cod sursa (job #1685660) | Cod sursa (job #3153440) | Cod sursa (job #836658) | Cod sursa (job #2471879)
#include <iostream>
#include <cstdio>
using namespace std;
int v[250010],s_st[250010],s_dr[250010],ss_st[250010],ss_dr[250010];
int main()
{
freopen ("cuburi2.in","r",stdin);
freopen ("cuburi2.out","w",stdout);
int n,i,m,x,y,st,dr,mijl,sumalastanga,sumaladreapta,poz;
cin>>n>>m;
for (i=1; i<=n; i++)
cin>>v[i];
for (i=1; i<=n; i++)
{
s_st[i]=s_st[i-1]+v[i];
ss_st[i]=ss_st[i-1]+s_st[i-1];
}
for (i=n; i>=1; i--)
{
s_dr[i]=s_dr[i+1]+v[i];
ss_dr[i]=ss_dr[i+1]+s_dr[i+1];
}
for (i=1; i<=m; i++)
{
cin>>x>>y;
st=x;
dr=y;
while (st<=dr)
{
mijl=(st+dr)/2;
if (s_st[mijl-1]-s_st[x-1]<s_st[y]-s_st[mijl-1])
{
st=mijl+1;
poz=mijl;
}
else
dr=mijl-1;
}
sumalastanga=ss_st[poz]-ss_st[x]-s_st[x-1]*(poz-x);
sumaladreapta=ss_dr[poz]-ss_dr[y]-s_dr[y+1]*(y-poz);
cout<<poz<<" "<<sumalastanga+sumaladreapta<<"\n";
}
return 0;
}