zoukankan      html  css  js  c++  java
  • 省选模拟70

    A. 小 Y 增员操直播群

      如果我们将区间合并的过程看做一棵树,那么答案就是树的深度。

      考虑检验一个区间是否可能是树上的一个节点,那么只要判断这个区间能否分成两个区间即可。

      考虑找到较小的区间的长度。在区间的左端点处查询区间内的最靠右的两个配对的点,那么这两个点的差就是区间长度。

      特判一下两个区间长度一样即可。

    B. 小 J 真爱粉交流群

      首先 可以发现,第二个人的作用是决定第一个人从哪一个位置下去,所以墙的位置必然是一段连续区间。

      考虑dp。令$f[i][l][r]$表示当前在$[l+1,r]$有墙,当前棋子在$l$的最优解。同理令$g[i][l][r]$表示当前$[l,r-1]$有墙,棋子在$r$的最优解。

      那么考虑转移,当前是第二个人做决定,所以他可以决定当前要不要在下面放墙。假如放,那么另外一个人会选择走到两边没有墙的位置。

      然后直接转移就行了。

    C. 青青草原播种计划

      对于任意子集的mex,有一个结论是,假设mex为$x$,$x$为第一个满足所有小于等于$x$的数加和为$x-1$的数。

      有了这个结论就很好做了,前面几个操作可以用显然的可持久化线段树来维护,合并的操作只要线段树合并就行。

      然后对于查询,找到历史版本对应的线段树的根节点,然后暴力跳,显然跳的次数不会超过log次。

      复杂度$O(nlog^2n)$

  • 相关阅读:
    [20180808]exists and not exists.txt
    [20180806]tune2fs调整保留块百分比.txt
    [20180730]exadata与行链接.txt
    [20180801]insert导致死锁.txt
    [20180718]拷贝数据文件从dg库.txt
    [20180713]关于hash join 测试中一个疑问.txt
    [20180705]关于hash join 2.txt
    virtualbox 中ubantu虚拟机范文win7文件夹
    myeclipse10安装findbugs
    win7共享文件夹给局域网
  • 原文地址:https://www.cnblogs.com/hzoi-cbx/p/12701424.html
Copyright © 2011-2022 走看看