Atcoder ABC(170) E 題題解
阿新 • • 發佈:2021-07-07
1.題意
自己 yy 的題意
有許多個幼兒園,有 \(N\) 個小朋友就讀其中。每個小朋友有一個搗蛋值,一個幼兒園的搗蛋值為這個幼兒園裡搗蛋值最大的小朋友,有一天, \(jw\) 來抽查這些學校,為了給 \(jw\) 留下好印象,這幾所幼兒園的校長將推舉出一所搗蛋值最小的幼兒園讓 \(jw\) 去參觀。可是小朋友們太搗蛋了,他們可能會從 C 幼兒園轉到 D 幼兒園。每當一個小朋友轉校,校長們就會去算 \(jw\) 將看到的搗蛋值,但小朋友們太搗蛋了,校長們光是管理就已經 玩不轉了 忙的不可開交,於是他們把這個任務交給了你。
一句話題意
給你 \(2 * 10^5\) 個集合,\(i\) 集合內元素的最大值記作 \(val[i]\)
2.題解
法一 優先佇列+懶惰標記
將每一個集合用大根堆(p1)來儲存,再將 \(val_i\) 用小根堆(p2)儲存。
將每一個操作分成6步走:
1.在 \(p2\) 中刪除 \(val[id[c]]\) (\(id[x]\) 表示目前 \(x\) 號小朋友在哪個集合)
2.刪除 \(p1[id[c]]\) 中的小朋友 \(c\)
3.在 \(p2\) 中加入 \(val[id[c]]\)
4.在 \(p2\) 中刪除 \(val[id[d]]\)
5.在 \(p1[d]\)
6.在 \(p2\) 中加入 \(val[id[d]]\)
新增操作非常好寫,直接丟進去就可以了。