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

Автор Jus_here_to_learn_dude, 2 недели назад, По-английски

having an array $$$arr$$$ with $$$n$$$ elements we have two types of queries:

  1. given an index $$$idx$$$ and a value $$$val$$$, $$$arr_{idx}:=val$$$
  2. given a range $$$(l,r)$$$, find the $$$MEX$$$ of the range

what is the most efficient way to do this?

i'd be grateful if you could share some c++ code to do this.

thanks in advance guys.

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

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

Check out Segment Trees

  • »
    »
    2 недели назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    I know seg trees and square root decomposition are possible options, but i'm not quite sure how to actually implement it. thanks for the reply anyways.

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

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

»
2 недели назад, # |
Rev. 2   Проголосовать: нравится +10 Проголосовать: не нравится

We can use 3D MO — $$$O(n ^ {5/3})$$$.

There is also a solution $$$O(n log ^ 2 n)$$$.

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

This might be helpful (it uses persistent segment trees which is an advanced topic)

  • »
    »
    2 недели назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    thanks man. I knew about MO's but had never heard of 3D MO or persistent seg trees. interesting! I'll spend some time studying these.