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

Автор _QWOiNYUIVMPFSBKLiGSMAP_, история, 6 лет назад, По-английски

IF you have ranges and you want to query on how many elements in this range but every cell have to contain at most one element and the updates are on the range whether be +1 or -1. this could be done with segment tree and how ?

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

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

What is the query supposed to answer?Number of elements in the range?

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

Are you talking about unique elements in range? Also, +-1 on range or on one element?

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

    1- +1/-1 to all the elements in a given range. (update) 2- i am talking about the number of non-zero elements in a given range. (query)

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

      I believe it can't be easily done using a segment tree. Though you can make an sqrt-decomposition of your array where for each block store cnt[] map of elements and a modifier to add to all of them. On update, add +-1 to the modifier for each block that lies entirely inside the range, and manually go through and change all remaining elements (and according cnts). On query, sum cnt[-modifier] for all inside blocks and manually count all remaining elements (not forgetting about their blocks' modifiers). Thus you'll count all zero elements, so subtract it from the range's length to get the count of non-zero