Submission #158172

#TimeUsernameProblemLanguageResultExecution timeMemory
158172fedoseevtimofeyWorst Reporter 3 (JOI18_worst_reporter3)C++14
100 / 100
542 ms23608 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef long double ld; const int K = 37; int L[K], R[K]; const int N = 5e5 + 7; int _time[N]; int _move[N]; const ll Inf = 1e9 + 7; signed main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.setf(ios::fixed); cout.precision(20); #ifdef LOCAL freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); #endif int n, q; cin >> n >> q; vector <int> d(n + 1); for (int i = 1; i <= n; ++i) cin >> d[i]; d[0] = 1; ++n; int m; { vector <pair <int, int>> seg; ll mv = 1; int lst = 0; ll ct = 1; for (int i = 1; i < n; ++i) { if (mv < d[i]) { seg.push_back({lst, i - 1}); _time[(int)seg.size() - 1] = ct; _move[(int)seg.size() - 1] = mv; ct *= (d[i] + mv - 1) / mv; ct = min(ct, Inf); mv *= (d[i] + mv - 1) / mv; mv = min(mv, Inf); lst = i; } } seg.push_back({lst, n - 1}); _time[(int)seg.size() - 1] = ct; _move[(int)seg.size() - 1] = mv; for (int i = 0; i < (int)seg.size(); ++i) L[i] = seg[i].first, R[i] = seg[i].second; m = seg.size(); } while (q--) { int t, l, r; cin >> t >> l >> r; int ans = 0; for (int i = 0; i < m; ++i) { int ps = t / _time[i]; ll pl = -L[i] + (ll)ps * _move[i]; ll pr = -R[i] + (ll)ps * _move[i]; swap(pl, pr); pl = max(pl, (ll)l); pr = min(pr, (ll)r); ans += max(0LL, pr - pl + 1); } cout << ans << '\n'; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...