fork download
  1. #include <bits/stdc++.h>
  2.  
  3. #define ll long long
  4. #define el cout << '\n'
  5. #define bit(mask, i) (((mask) >> (i)) & 1)
  6.  
  7. using namespace std;
  8.  
  9. struct Query
  10. {
  11. int l, r, x;
  12.  
  13. Query(int l = 0, int r = 0, int x = 0) :
  14. l(l), r(r), x(x) {};
  15. };
  16.  
  17. const int maxn = 5e5;
  18. const int maxk = 30;
  19. const int MOD = 998244353;
  20.  
  21. int n, k, q, a[maxn + 10], mx[maxn + 10];
  22. Query queries[maxn + 10];
  23. ll ans = 1, dp[maxn + 10], pre[maxn + 10];
  24.  
  25. ll cnt_ways(int k)
  26. {
  27. memset(a, 0, sizeof a);
  28. memset(mx, 0, sizeof mx);
  29. memset(dp, 0, sizeof dp);
  30. for (int i = 1; i <= q; i++)
  31. {
  32. auto [l, r, x] = queries[i];
  33. if (!bit(x, k))
  34. {
  35. mx[r] = max(mx[r], l);
  36. continue;
  37. }
  38. a[l]++;
  39. a[r + 1]--;
  40. }
  41. int sum = 0;
  42. dp[0] = 1;
  43. pre[0] = 1;
  44. // cout << k, el;
  45. for (int i = 1; i <= n + 1; i++)
  46. {
  47. mx[i] = max(mx[i], mx[i - 1]);
  48. sum += a[i];
  49. a[i] = min(1, sum);
  50. if (a[i] == 1)
  51. dp[i] = 0;
  52. else if (mx[i - 1])
  53. dp[i] = (pre[i - 1] - pre[mx[i - 1] - 1]) % MOD;
  54. else
  55. dp[i] = pre[i - 1];
  56. (pre[i] = pre[i - 1] + dp[i]) %= MOD;
  57. // cout << a[i] << ' ';
  58. }
  59. // el;
  60. // for (int i = 1; i <= n + 1; i++)
  61. // cout << mx[i] << ' ';
  62. // el;
  63. // for (int i = 1; i <= n + 1; i++)
  64. // cout << dp[i] << ' ';
  65. return dp[n + 1];
  66. }
  67.  
  68. int main()
  69. {
  70. ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
  71. if (fopen("ANDSEG.INP", "r"))
  72. {
  73. freopen("ANDSEG.INP", "r", stdin);
  74. freopen("ANDSEG.OUT", "w", stdout);
  75. }
  76.  
  77. cin >> n >> k >> q;
  78. for (int i = 1; i <= q; i++)
  79. {
  80. int l, r, x;
  81. cin >> l >> r >> x;
  82. queries[i] = Query(l, r, x);
  83. }
  84. for (int i = k - 1; i >= 0; i--)
  85. (ans *= cnt_ways(i)) %= MOD;
  86. cout << (ans + MOD) % MOD;
  87. }
  88.  
Success #stdin #stdout 0.01s 11808KB
stdin
Standard input is empty
stdout
1