orazma

b.cpp

Mar 27th, 2026
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.14 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define ll long long
  3. #define f first
  4. #define s second
  5. using namespace std;
  6. int n, m, q;
  7. const int MAXN = 2e5 + 10;
  8. const int INF = 1e9 + 7;
  9.  
  10. int t[4 * MAXN], a[MAXN], add[4 * MAXN];
  11.  
  12. void build(int v, int tl, int tr){
  13.     if (tl > tr){
  14.         return;
  15.     }
  16.     if (tl == tr){
  17.         t[v] = a[tl];
  18.         return;
  19.     }
  20.  
  21.     int tm = (tl + tr) / 2;
  22.     build(v + v, tl, tm);
  23.     build(v + v + 1, tm + 1, tr);
  24.     t[v] = max(t[v + v], t[v + v + 1]);
  25. }
  26.  
  27. void push(int v){
  28.     if (add[v] != 0){
  29.         t[v + v] = add[v];
  30.         t[v + v + 1] = add[v];
  31.         add[v + v] = add[v];
  32.         add[v + v + 1] = add[v];
  33.         add[v] = 0;
  34.     }
  35. }
  36.  
  37. int get_max(int v, int tl, int tr, int l, int r){
  38.     if (l > r){
  39.         return -INF;
  40.     }
  41.     if (l == tl && r == tr){
  42.         return t[v];
  43.     }
  44.     int tm = (tl + tr) / 2;
  45.     push(v);
  46.     return max(get_max(v + v, tl, tm, l, min(r, tm)),
  47.                get_max(v + v + 1, tm + 1, tr, max(l, tm + 1), r));
  48. }
  49.  
  50. void update(int v, int tl, int tr, int l, int r, int val){
  51.     if (l > r){
  52.         return;
  53.     }
  54.     if (tl == l && tr == r){
  55.         t[v] = val;
  56.         add[v] = val;
  57.         return;
  58.     }
  59.     int tm = (tl + tr) / 2;
  60.     push(v);
  61.     update(v + v, tl, tm, l, min(r, tm), val);
  62.     update(v + v + 1, tm + 1, tr, max(l, tm + 1), r, val);
  63.     t[v] = max(t[v + v], t[v + v + 1]);
  64. }
  65.  
  66. int main() {
  67.  
  68.     //freopen("sum.in", "r", stdin);
  69.     //freopen("sum.out", "w", stdout);
  70.  
  71.     int n, q;
  72.     cin >> n >> q;
  73.     for (int i = 1; i <= n; i++){
  74.         a[i] = 1;
  75.     }
  76.  
  77.     build(1, 1, n);
  78.     pair <int, pair <int, int> > b[q + 1];
  79.     for (int i = 1; i <= q; i++){
  80.         cin >> b[i].s.f >> b[i].s.s >> b[i].f;
  81.     }
  82.     sort(b + 1, b + q + 1);
  83.     reverse(b + 1, b + q + 1);
  84.  
  85.     for (int i = 1; i <= q; i++){
  86.         update(1, 1, n, b[i].s.f, b[i].s.s, b[i].f);
  87.     }
  88.  
  89.     for (int i = 1; i <= q; i++){
  90.         if (get_max(1, 1, n, b[i].s.f, b[i].s.s) != b[i].f){
  91.             cout << -1;
  92.             return 0;
  93.         }
  94.     }
  95.     for (int i = 1; i <= n; i++){
  96.         cout << get_max(1, 1, n, i, i) << ' ';
  97.     }
  98. }
  99.  
  100.  
Advertisement
Add Comment
Please, Sign In to add comment