zoukankan      html  css  js  c++  java
  • 【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^kover 32})$。

    但如果aij在10^9里呢?我们试图枚举答案aiy。我们将所有该项属性值>=aiy的看成1,其余的看成0,那么维护方法就和上面说的一样了。如果最终的答案是1,说明答案>=aiy。

    最终复杂度$O({q2^kover 32}+qk^2)$。

  • 相关阅读:
    linux | 一次网卡故障处理
    KVM | centos 安装 window 虚拟机
    DNS | named.run文件很大的处理方法
    01
    802.11X用户身份验证
    802.11有线等效加密WEP
    802.11成帧细节
    802.11 MAC基础
    【转载】我为什么放弃了 Linux 内核学习?
    Linux网络编程(一):一个简单的socket程序
  • 原文地址:https://www.cnblogs.com/CQzhangyu/p/8097563.html
Copyright © 2011-2022 走看看