tuki2501

7482.cpp

Jan 9th, 2022
1,232
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.55 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. typedef long long ll;
  5.  
  6. template<typename T>
  7. void chmax(T &a, T b) {
  8.   if (a < b) a = b;
  9. }
  10.  
  11. struct SMT {
  12.   int n; vector<int> node, lazy;
  13.   SMT(int n): n(n), node((n + 1) * 4, 0), lazy((n + 1) * 4, INT_MIN) {}
  14.   void down(int i, int l, int m, int r) {
  15.     chmax(node[i * 2], lazy[i]);
  16.     chmax(lazy[i * 2], lazy[i]);
  17.     chmax(node[i * 2 + 1], lazy[i] + (m + 1 - l));
  18.     chmax(lazy[i * 2 + 1], lazy[i] + (m + 1 - l));
  19.     lazy[i] = INT_MIN;
  20.   }
  21.   void update(int i, int l, int r, int u, int v, int val) {
  22.     if (r < u || l > v) return;
  23.     if (l >= u && r <= v) {
  24.       chmax(node[i], val);
  25.       chmax(lazy[i], val);
  26.       return;
  27.     }
  28.     int m = (l + r) / 2;
  29.     down(i, l, m, r);
  30.     update(i * 2, l, m, u, v, val);
  31.     update(i * 2 + 1, m + 1, r, u, v, val + (m + 1 - l));
  32.   }
  33.   int get(int i, int l, int r, int pos) {
  34.     if (r < pos || l > pos) return INT_MIN;
  35.     if (l == pos && r == pos) {
  36.       return node[i];
  37.     }
  38.     int m = (l + r) / 2;
  39.     down(i, l, m, r);
  40.     return max(get(i * 2, l, m, pos), get(i * 2 + 1, m + 1, r, pos));
  41.   }
  42.   void update(int u, int v, int val) {
  43.     update(1, 1, n, u, v, val);
  44.   }
  45.   int get(int pos) {
  46.     return get(1, 1, n, pos);
  47.   }
  48. };
  49.  
  50. signed main() {
  51.   cin.tie(0)->sync_with_stdio(0);
  52.   int n, m;
  53.   cin >> n >> m;
  54.   SMT smt(n);
  55.   for (int i = 1; i <= m; i++) {
  56.     int l, r, x;
  57.     cin >> l >> r >> x;
  58.     smt.update(l, r, x - l + 1);
  59.   }
  60.   for (int i = 1; i <= n; i++) {
  61.     cout << smt.get(i) << ' ';
  62.   }
  63.   cout << '\n';
  64. }
  65.  
Advertisement
Add Comment
Please, Sign In to add comment