Submission #1252109

#TimeUsernameProblemLanguageResultExecution timeMemory
1252109LucaLucaMWorst Reporter 3 (JOI18_worst_reporter3)C++20
100 / 100
339 ms11196 KiB
#include <iostream> #include <vector> #include <algorithm> #include <cassert> using ll = long long; #define debug(x) #x << " = " << x << '\n' const ll INF = 1e10; int main() { std::ios_base::sync_with_stdio(false); std::cin.tie(0); int n, q; std::cin >> n >> q; std::vector<ll> time(n + 1, 0); std::vector<ll> len(n + 1, 0); int d1; std::cin >> d1; time[1] = d1; len[1] = d1; for (int i = 2; i <= n; i++) { int d; std::cin >> d; ll k = (d + len[i - 1] - 1) / len[i - 1]; time[i] = std::min(+INF, (ll) time[i - 1] * k); len[i] = std::min(+INF, len[i - 1] * k); } auto getPos = [&](int i, int t) -> ll { if (time[i] == +INF) { return -i; } if (len[i] == +INF) { return +INF; } return -i + (ll) len[i] * ((ll) t / time[i]); }; auto query = [&](int p, int t) { if (getPos(n, t) > p) { return 0; } int l = 1, r = n; while (l < r) { int mid = (l + r) / 2; if (getPos(mid, t) <= p) { r = mid; } else { l = mid + 1; } } return n - r + 1; }; while (q--) { int t, l, r; std::cin >> t >> l >> r; int answer = 0; if (l <= t && t <= r) { answer++; } answer += query(r, t); answer -= query(l - 1, t); std::cout << answer << '\n'; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...