【CF878D】Magic Breeding bitset


【CF878D】Magic Breeding

題意:有k個物品,每個物品有n項屬性值,第i個人的第j個屬性值為aij,有q個操作:

1 x y 用x和y合成一個新的物品,新物品的編號是++k,新物品的每項屬性值為x和y的對應項的屬性值中的較大值。
2 x y 用x和y合成一個新的物品,新物品的編號是++k,新物品的每項屬性值為x和y的對應項的屬性值中的較小值。
3 x y 詢問x物品的屬性y的值。

n,q<=100000,k<=12,aij<=10^9

題解:神題,很容易讓人想到排序那道題,不過這題更為復雜。

先考慮一個簡單的版本,如果aij=0或1,那么只有$2^k$中本質不同的屬性值。我們可以理解為第S(可以看成一個二進制狀態)個屬性的意義是:只有S中的物品該項屬性值為1。每次操作我們可以暴力維護,也可以使用bitset優化,復雜度$O({q2^k\over 32})$。

但如果aij在10^9里呢?我們試圖枚舉答案aiy。我們將所有該項屬性值>=aiy的看成1,其余的看成0,那么維護方法就和上面說的一樣了。如果最終的答案是1,說明答案>=aiy。

最終復雜度$O({q2^k\over 32}+qk^2)$。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM