Pagini recente » Cod sursa (job #2990490) | Cod sursa (job #2507634) | Cod sursa (job #276888) | Cod sursa (job #2184962) | Cod sursa (job #2865220)
#include <fstream>
using namespace std;
long long int v[250005], su[250005], d[250005];
int main()
{
ifstream cin("cuburi2.in");
ofstream cout("cuburi2.out");
long long int n, m, x, y, s = 0, st, dr, ls, lb, mid, minn;
cin >> n >> m;
for(int i = 1; i <= n; i++)
{
cin >> v[i];
}
for(int k = 0; k < m; k++)
{
cin >> x >> y;
s = v[y] * (y - x);
d[y] = v[y];
for(int i = y - 1; i >= x; i--)
{
s += v[i] * (i - x);
d[i] = d[i + 1] + v[i];
}
for(int i = x; i <= y; i++)
{
su[i] = d[x] - 2 * d[i];
}
st = x;
dr = y;
while(st <= dr)
{
mid = (dr - st) / 2 + st;
if(su[mid] < 0)
{
st = mid + 1;
ls = mid;
}
else
{
lb = mid;
dr = mid - 1;
}
}
su[x]=0;
for(int i = x; i <= lb; i++)
{
s += su[i];
if(i == ls)
{
minn = s;
}
else if(i == lb)
{
if(s < minn)
{
minn = s;
ls = lb;
}
}
}
cout << ls << " " << minn << '\n';
}
return 0;
}