zoukankan      html  css  js  c++  java
  • 背包的一些idea

    题解:

    给出n个物品,每次能使用l-r之间的物品,问能不能表示出k,m次询问

    k<=100,m,n=1e5

    想了线段树分治 发现是k^2(n+m)logn

    claris告诉我可以直接分治

    我们对mid-r mid-l分别求一次背包

    这样是nklogn的

    我们就可以对包含mid的公司做处理

    o(k) 查询

    for(i=0;i<=k;i++)ans|=f[l][i]&g[r][k-i]

    然后就解决了

    还有个问题是怎么找对应mid的区间

    我的思路是对每层都枚举所有询问暴力二分一下h的后继(把所有区间起点搞出来)

    这样是mlog^2 n (虽然不影响)

    claris提供了一种mlogn的做法

    原理是每个有效点只会进入log次

    做法就是每次对不在区间内的扔了 做好的也扔了(不然指数级递增的)

  • 相关阅读:
    LNMP架构三
    LNMP架构二
    LNMP架构
    LAMP架构三
    LAMP架构二
    LAMP架构
    rsync工具介绍
    mysqldump备份单表数据
    阿铭每日一题 day 14 20180125
    阿铭每日一题 day 13 20180124
  • 原文地址:https://www.cnblogs.com/yinwuxiao/p/9119651.html
Copyright © 2011-2022 走看看