Pagini recente » Cod sursa (job #3337617) | Cod sursa (job #3320378) | Cod sursa (job #3316847) | Cod sursa (job #2933637) | Cod sursa (job #3343315)
#include <bits/stdc++.h>
using namespace std;
#define int long long
signed main() {
cin.tie(nullptr)->sync_with_stdio(false);
#ifndef LOCAL
freopen("cuburi2.in", "r", stdin);
freopen("cuburi2.out", "w", stdout);
#endif
int n, m; cin >> n >> m;
vector<int> v(n+1), sp(n+1), spp(n+1);
for(int i = 1; i <= n; ++i)
cin >> v[i];
for(int i = 1; i <= n; ++i) {
sp[i] = sp[i-1] + v[i];
spp[i] = spp[i-1] + i * v[i];
}
while(m--) {
int x, y; cin >> x >> y;
int nrElem = sp[y] - sp[x-1];
int st = x, dr = y, ans = y+1;
while(st <= dr) {
int mid = (st + dr) >> 1;
if(sp[mid] - sp[x-1] >= (nrElem + 1) / 2) {
ans = mid;
dr = mid - 1;
} else {
st = mid + 1;
}
}
int cost = spp[y] - spp[ans] - ans * (sp[y] - sp[ans]) + ans * (sp[ans-1] - sp[x-1]) - spp[ans-1] + sp[x-1];
cout << ans << ' ' << cost << '\n';
}
return 0;
}