CSP-S 模拟91

简要写一下数据结构


 

  Dove 打扑克优化

    并查集维护堆的合并,最多合并n-1次,且size不一样的堆的种类不可能超过$\sqrt(n)$ 种,并且堆的个数愈来愈小,并且操做次数大概是$3n$spa

    基于以上几点,咱们暴力干它关于合并的操做能够暴力,而后用数据结构等优化查询操做$O(\sqrt(n))$或$O(1)$查询排序

  Cicada 与排序io

    几率DP,设f[x][y],表示初始时在x位置的数当前在y位置的几率,cet[y][k]表示归并排序中从两个儿子合并成一个大区间时位置y上的数移动到位置k  的几率for循环

    显然,本轮合并完成后,当前的$f[x][k]=$原来的$f[x][y]*cet[y][k]$,跑一遍归并排序,回溯的时候更新当前的几率,最终获得f[i][j]表示初始i  位置的数排完序后在位置j的几率循环

    几率乘上对应的j后在加和就是位置i最后的指望位置二进制

  Cicada 拿衣服链表

    随着区间长度增长,$or$和$max$单调不降低,$and$和$min$单调不上升,$min-max$ 单调降低,而$or-and$ 不肯定数据

    因此考虑二进制下,最多有log位,肯定右端点后,找左端点,在左端点的选择范围中必定有一段段$or-and$相等的区间,而这样的区间最多约有log  个,在划分的区间内部$or+min-max-and$ 单调,因此能够二分,能够用链表维护分界点,查找左端点时其实不须要一个个区间二分,由于区间内部单调,  因此找区间最值看是否知足大于等于k,

  从左向右找第一个存在合法左端点的区间,在这个区间二分便可

    打了一下午加半个晚上,没调出来,链表没错,线段树没错,for循环没错,可能会错的我都没错,最后发现不知道何时复制粘贴的最不可能错的  一句挂了,提醒广大观众朋友:

  打代码千万不要过于依赖复制粘贴

相关文章
相关标签/搜索