fork download
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. typedef long long ll;
  6. typedef pair<int, int> ii;
  7.  
  8. const int INF = 1e9;
  9. const ll LINF = 1e18;
  10.  
  11. const int MX = 1e6;
  12. const int LOG = 20;
  13.  
  14. int n, q;
  15. int nxt[LOG][MX + 5]; // // nxt[i][a] = Thời điểm kết thúc sớm nhất có thể sau khi xem 2^i bộ phim kể từ thời điểm a
  16.  
  17. int main() {
  18. ios::sync_with_stdio(false);
  19. cin.tie(nullptr);
  20. cin >> n >> q;
  21.  
  22. // nxt[0][a] = Thời điểm kết thúc sớm nhất trong số các bộ phim có thể xem kể từ thời điểm a
  23. for (int a = 1; a <= MX + 1; a++) nxt[0][a] = MX + 1;
  24.  
  25. for (int i = 0; i < n; i++) {
  26. int a, b;
  27. cin >> a >> b;
  28. nxt[0][a] = min(nxt[0][a], b);
  29. }
  30.  
  31. for (int a = MX; a >= 1; a--) {
  32. nxt[0][a] = min(nxt[0][a], nxt[0][a + 1]);
  33. }
  34.  
  35. for (int i = 1; i < LOG; i++) {
  36. for (int a = 1; a <= MX + 1; a++) {
  37. nxt[i][a] = nxt[i - 1][nxt[i - 1][a]];
  38. }
  39. }
  40.  
  41. while (q--) {
  42. int a, b;
  43. cin >> a >> b;
  44.  
  45. int ans = 0;
  46. for (int i = 19; i >= 0; i--) {
  47. if (nxt[i][a] <= b) {
  48. ans += (1 << i);
  49. a = nxt[i][a];
  50. }
  51. }
  52.  
  53. cout << ans << '\n';
  54. }
  55. }
Success #stdin #stdout 0.04s 81664KB
stdin
4 3
2 5
6 10
4 7
9 10
5 9
2 10
7 10
stdout
0
2
1