Блог пользователя _Bunny

Автор _Bunny, история, 4 месяца назад, По-английски

Problem: Given an array a1, a2, ..., an (1 <= n <= 1e6) and q queries, for each query has two types.

1 l r x: a[i] = min(a[i], x) (l <= i <= r).

2 i : print value in position i.

I dont know use lazy update to solve operator 1, help me pls (sorry i'm poor E).

  • Проголосовать: нравится
  • -13
  • Проголосовать: не нравится

»
4 месяца назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Auto comment: topic has been updated by _Bunny (previous revision, new revision, compare).

»
4 месяца назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

instead of setting tree[id].min value to x just set it to min(tree[id].min, x)

»
4 месяца назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

tr[x].val = min (tr[x] . val , v);

»
4 месяца назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Above problem can be solved using a simple segment tree, without doing lazy propagation since the operation 1 is commutative.

To learn "Lazy propagation" you can refer to "Segment Tree, part-2" of Edu section.

»
4 месяца назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

From now, lazy is also a new category just like greedy

»
4 месяца назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

You don't need lazy, Use the approach of the cses Range Update Queries.

Here: Code