Pagini recente » Cod sursa (job #2913241) | Cod sursa (job #3129435) | Cod sursa (job #1537434) | Cod sursa (job #1894161) | Cod sursa (job #2476435)
#include <fstream>
using namespace std;
ifstream cin ("cuburi2.in");
ofstream cout ("cuburi2.out");
int v[250005];
int st[250005];
int dr[250005];
long long costst[250005];
long long costdr[250005];
int main()
{
long long n,m,i,poz,x,y,sumst,sumdr,sta,dre,mi;
cin>>n>>m;
for (i=1;i<=n;i++)
{
cin>>v[i];
st[i]=st[i-1]+v[i];
}
for (i=n;i>=1;i--)
dr[i]=dr[i+1]+v[i];
for (i=1;i<=n;i++)
costst[i]=costst[i-1]+st[i-1];
for (i=n;i>=1;i--)
costdr[i]=costdr[i+1]+dr[i+1];
for (int h=1;h<=m;h++)
{
cin>>x>>y;
sta=x;
dre=y;
while (sta<=dre)
{
mi=(sta+dre)/2;
if (st[mi-1]-st[x-1]<st[y]-st[mi-1])
{
poz=mi;
sta=mi+1;
}
else
dre=mi-1;
}
sumst=costst[poz]-costst[x]-st[x-1]*(poz-x);
sumdr=costdr[poz]-costdr[y]-dr[y+1]*(y-poz);
cout<<poz<<' '<<sumst+sumdr<<'\n';
}
return 0;
}