Advertisement
bibaboba12345

Untitled

Jan 7th, 2023
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.16 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <iostream>
  3. #include <bitset>
  4. #include <vector>
  5. #include <algorithm>
  6. #include <random>
  7. #include <map>
  8. #include <set>
  9. #include <deque>
  10. #include <cassert>
  11. const int N = 5e5 + 7, A = 26, MOD = 1e9+7, C = 2;
  12. using namespace std;
  13.  
  14. #define int long long
  15.  
  16. long long a[N];
  17. int n, q;
  18.  
  19. struct Node {
  20. long long val[4]; // 00 01 10 11
  21. };
  22.  
  23. Node merge(Node l, Node r) {
  24. Node ans;
  25. ans.val[0] = max(l.val[0] + r.val[0], max(l.val[0] + r.val[2], l.val[1] + r.val[0]) );
  26. ans.val[1] = max(l.val[1] + r.val[1], max(l.val[0] + r.val[1], l.val[0] + r.val[3]) );
  27. ans.val[2] = max(l.val[2] + r.val[0], max(l.val[2] + r.val[2], l.val[3] + r.val[0]) );
  28. ans.val[3] = max(l.val[2] + r.val[1], max(l.val[2] + r.val[3], l.val[3] + r.val[1]) );
  29. return ans;
  30. }
  31.  
  32. struct SegmentTree {
  33. vector<Node> tree;
  34. void build(int n) {
  35. int h = 1;
  36. while (h < n) {
  37. h *= 2;
  38. }
  39. h *= 2;
  40. tree.resize(h);
  41. for (int i = h - 1; i > 0; i--) {
  42. if (i >= h / 2) {
  43. tree[i].val[0] = 0;
  44. tree[i].val[1] = 0;
  45. tree[i].val[2] = 0;
  46. tree[i].val[3] = a[i - h/2];
  47. }
  48. else {
  49. tree[i] = merge(tree[i * 2], tree[i * 2 + 1]);
  50. }
  51. }
  52. }
  53. void upd(int v, int val) {
  54. a[v] = val;
  55. v += tree.size() / 2;
  56. tree[v].val[3] = val;
  57. v /= 2;
  58. while (v != 0) {
  59. tree[v] = merge(tree[v * 2], tree[v * 2 + 1]);
  60. v /= 2;
  61. }
  62. }
  63. long long mx() {
  64. return max(max(tree[1].val[0], tree[1].val[1]), max(tree[1].val[2], tree[1].val[3]));
  65. }
  66. };
  67.  
  68. SegmentTree ST;
  69.  
  70. long long dp[N][2];
  71.  
  72. signed main()
  73. {
  74. #ifdef _DEBUG
  75. freopen("input.txt", "r", stdin);
  76. #else
  77. std::ios::sync_with_stdio(false);
  78. cin.tie(0);
  79. #endif
  80. cin >> n >> q;
  81. for (int i = 0; i < n; i++) {
  82. cin >> a[i];
  83. }
  84. ST.build(n);
  85. for (int i = 0; i < q; i++) {
  86. int x, c;
  87. cin >> x >> c;
  88. x--;
  89. ST.upd(x, c);
  90. cout << ST.mx() << "\n";
  91. }
  92. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement