#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
void solve () {
int n, q; cin >> n >> q;
vector <ll> d(n + 1, 0), f(n + 1, 0);
for (int i = 1; i <= n; i++) {
cin >> d[i];
}
f[1] = d[1];
for (int i = 2; i <= n; i++) {
if (d[i] <= f[i - 1]) {
f[i] = f[i - 1];
} else {
f[i] = f[i - 1] * ((d[i] + f[i - 1] - 1) / f[i - 1]);
}
}
map <ll, pair <ll, ll>> ranges;
for (int i = 1; i <= n; i++) {
if (!ranges.count(f[i])) {
ranges[f[i]] = {i, i};
} else {
ranges[f[i]].second = i;
}
}
while (q--) {
ll l, r, t; cin >> t >> l >> r;
int ans = 0;
for (auto i : ranges) {
ll u = (t / i.first) * i.first;
//count x such that left <= x <= right, and u - x <= r, so x >= u - r
ans += max(0ll, i.second.second - max(i.second.first, u - r) + 1);
//count x such that left <= x <= right, and u - x <= l - 1, so x >= u - l + 1
ans -= max(0ll, i.second.second - max(i.second.first, u - l + 1) + 1);
}
ans += t >= l && t <= r;
cout << ans << '\n';
}
}
signed main () {
ios::sync_with_stdio(0); cin.tie(0);
int tc = 1; //cin >> tc;
while (tc--) solve();
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |