Pagini recente » Cod sursa (job #1770148) | Cod sursa (job #2789586) | Cod sursa (job #1937507) | Cod sursa (job #13899) | Cod sursa (job #2407136)
#include <fstream>
using namespace std;
ifstream fin("cuburi2.in");
ofstream fout("cuburi2.out");
const int NMAX = 250000;
int N, M;
long long sp[NMAX + 5];
long long st[NMAX + 5];
long long dr[NMAX + 5];
int main()
{
int x, y;
fin >> N >> M;
for(int i = 1; i <= N; i++)
{
fin >> x;
sp[i] = sp[i - 1] + x;
st[i] = st[i - 1] + sp[i];
}
for(int i = N; i >= 1; i--)
dr[i] = dr[i + 1] + sp[N] - sp[i - 1];
for(int i = 1; i <= M; i++)
{
fin >> x >> y;
int stt = x, drr = y, mid, sol = x;
while(stt <= drr)
{
mid = (stt + drr) >> 1;
if(sp[mid - 1] - sp[x - 1] < sp[y] - sp[mid - 1])
{
stt = mid + 1;
sol = mid;
}
else
drr = mid - 1;
}
long long t = st[sol - 1] + dr[sol + 1]
- st[x - 1] - dr[y + 1]
- sp[x - 1] * (sol - x) - (sp[N] - sp[y]) * (y - sol);
fout << sol << ' ' << t << '\n';
}
return 0;
}