Pagini recente » Cod sursa (job #2900824) | Cod sursa (job #3343629) | Cod sursa (job #1552040) | Cod sursa (job #3339813) | Cod sursa (job #3342322)
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ld = long double;
using uint = unsigned int;
using ull = unsigned long long;
#if 1
#define int ll
#define uint ull
#endif
/**
* Problem: Cuburi2
* URL: https://www.infoarena.ro/problema/cuburi2
* TL: 375 ms
* ML: 20 MB
*
* Good Luck!
*/
void preinit() {
}
void tc() {
int n, q;
cin >> n >> q;
vector<int> a(n + 1), ps(n + 1), psi(n + 1);
for (int i = 1; i <= n; ++i) {
cin >> a[i];
ps[i] = ps[i - 1] + a[i];
psi[i] = psi[i - 1] + i * a[i];
}
auto sw = [&](int l, int r) -> int {
if (l > r) return 0;
return ps[r] - ps[l - 1];
};
auto siw = [&](int l, int r) -> int {
if (l > r) return 0;
return psi[r] - psi[l - 1];
};
while (q--) {
int l, r;
cin >> l >> r;
int tot = sw(l, r);
if (tot == 0) {
cout << l << ' ' << 0 << '\n';
continue;
}
int k = tot / 2 + 1;
int t = ps[l - 1] + k;
int p = int(lower_bound(ps.begin() + l, ps.begin() + r + 1, t) - ps.begin());
int lw = sw(l, p - 1);
int liw = siw(l, p - 1);
int rw = sw(p + 1, r);
int riw = siw(p + 1, r);
int ans = p * lw - liw + riw - p * rw;
cout << p << ' ' << ans << '\n';
}
}
#define MTC 0
#define FIO 1
#define FN "cuburi2"
signed main() {
#if FIO == 1 && !defined(LOCAL)
(void)freopen(FN ".in", "r", stdin);
(void)freopen(FN ".out", "w", stdout);
#endif
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
preinit();
#if MTC == 1
signed tt;
cin >> tt;
while (tt--) tc();
#else
tc();
#endif
return 0;
}