Submission #1164447

#TimeUsernameProblemLanguageResultExecution timeMemory
1164447fzyzzz_zWorst Reporter 3 (JOI18_worst_reporter3)C++20
100 / 100
355 ms15180 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; int main() { ios_base::sync_with_stdio(false); cin.tie(0); int n, q; cin >> n >> q; vector<ll> d(n + 1); for (int i = 1; i <= n; ++i) { cin >> d[i]; } vector<ll> dist(n + 1), time(n + 1); dist[0] = 1; time[0] = 1; for (int i = 1; i <= n; ++i) { // if (dist[i - 1] >= d[i]) { // dist[i] = dist[i - 1]; // time[i] = time[i - 1]; // continue; // } ll need = (d[i] + dist[i - 1] - 1) / dist[i - 1]; dist[i] = dist[i - 1] * need; time[i] = time[i - 1] * need; // cout << dist[i] << " " << time[i] << "\n"; } auto calc_pos = [&] (int p, ll t) -> ll { ll st = -p; ll moves = t / time[p]; st += moves * dist[p]; return st; }; while (q--) { ll t, l, r; cin >> t >> l >> r; if (calc_pos(0, t) < l || r < calc_pos(n, t)) { cout << 0 << '\n'; continue; } int f, s; int lo = 0, hi = n; while (lo < hi) { int md = (lo + hi) / 2; if (calc_pos(md, t) <= r) { hi = md; } else { lo = md + 1; } } f = lo; lo = 0, hi = n; while (lo < hi) { int md = (lo + hi + 1) / 2; if (calc_pos(md, t) >= l) { lo = md; } else { hi = md - 1; } } s = lo; // cout << f << ' ' << s << '\n'; cout << (s >= f ? s - f + 1 : 0) << "\n"; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...