Salvens

Untitled

Jul 24th, 2023
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.79 KB | None | 0 0
  1. #include <array>
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. #define int long long
  7.  
  8. const int INF = 1e18 + 7;
  9. const int MAXN = 1e5;
  10.  
  11. array<int, 4 * MAXN> seg, pref, suf, sum;
  12. array<int, 4 * MAXN> upd;
  13.  
  14. void push(int x, int lx, int rx) {
  15. if (upd[x] == INF) {
  16. return;
  17. }
  18. if (rx - lx == 1) {
  19. return;
  20. }
  21. upd[2 * x + 1] = upd[x];
  22. upd[2 * x + 2] = upd[x];
  23. seg[x] = pref[x] = suf[x] = (upd[x] > 0? upd[x] * (rx - lx): 0);
  24. sum[x] = upd[x] * (rx - lx);
  25. upd[x] = INF;
  26. }
  27.  
  28. void update(int x, int lx, int rx, int l, int r, int v) {
  29. push(x, lx, rx);
  30. if (rx <= l || lx >= r) {
  31. return;
  32. }
  33. if (lx >= l && rx <= r) {
  34. upd[x] = v;
  35. push(x, lx, rx);
  36. return;
  37. }
  38. int mid = (lx + rx) / 2;
  39. update(x * 2 + 1, lx, mid, l, r, v);
  40. update(x * 2 + 2, mid, rx, l, r, v);
  41.  
  42. int left = 2 * x + 1, right = 2 * x + 2;
  43. seg[x] = max({seg[left], seg[right], suf[left] + pref[right]});
  44. pref[x] = max(pref[left], sum[left] + pref[right]);
  45. suf[x] = max(suf[right], suf[left] + sum[right]);
  46. sum[x] = sum[left] + sum[right];
  47. }
  48.  
  49. void init() {
  50. fill(upd.begin(), upd.end(), INF);
  51. fill(seg.begin(), seg.end(), 0);
  52. fill(pref.begin(), pref.end(), 0);
  53. fill(suf.begin(), suf.end(), 0);
  54. fill(sum.begin(), sum.end(), 0);
  55. }
  56.  
  57. signed main() {
  58. ios_base::sync_with_stdio(false);
  59. cin.tie(nullptr);
  60. int n, m;
  61. cin >> n >> m;
  62. init();
  63. for (int i = 0; i < m; ++i) {
  64. int l, r, v;
  65. cin >> l >> r >> v;
  66. update(0, 0, n, l, r, v);
  67. // for (int i = 0; i < 20; ++i) {
  68. // cout << sum[i] << ' ';
  69. // }
  70. // cout << endl;
  71. cout << seg[0] << ' ' << pref[0] << ' ' << suf[0] << ' ' << sum[0] << '\n';
  72. }
  73. }
Advertisement
Add Comment
Please, Sign In to add comment