Pagini recente » Cod sursa (job #3157749) | Cod sursa (job #1548149) | Cod sursa (job #897837) | Cod sursa (job #1467806) | Cod sursa (job #2475211)
#include <fstream>
#define lim 250000
using namespace std;
ifstream in("cuburi2.in");
ofstream out("cuburi2.out");
long long a[lim+5], spst[lim+5], spdr[lim+5], dpst[lim+5], dpdr[lim+5];
int n,m,i,rez,st,dr;
int cb (int l, int r)
{
int st = l;
int dr = r;
int good = l;
while (st <= dr)
{
int mid = (st + dr) / 2;
if (spst[mid - 1] - spst[l - 1] < spst[r] - spst[mid - 1])
{
good = mid;
st = mid + 1;
}
else
dr = mid - 1;
}
return good;
}
int main()
{
in>>n>>m;
for(i=1;i<=n;i++)
{
in>>a[i];
spst[i] = a[i] + spst[i-1];
dpst[i] = dpst[i-1] + spst[i-1];
}
for(i=n; i>=1; i--)
{
spdr[i] = a[i] + spdr[i+1];
dpdr[i] = dpdr[i+1] + spdr[i+1];
}
for(i=1;i<=m;i++)
{
in>>st>>dr;
rez = cb(st, dr);
out<<rez<<' ';
long long sol;
sol = dpst[rez] - dpst[st] - (rez - st) * (spst[st - 1]) ;
sol += dpdr[rez] - dpdr[dr] - (dr - rez) * (spst[n] - spst[dr]);
out<<sol<<'\n';
}
return 0;
}