【学习笔记】NOIP模拟赛

给国的锟题 (problem)

  • 数据结构神题猜的
  • 首先分析性质,如果某次时刻剩下来某道题,那么后面不论怎么添加这道题都会剩下来
  • 考虑维护每个人选了哪些题,初始每个人拿着的都是 a [ i ] a[i] a[i]
  • 考虑一个巧妙的转化,每次新加入一道题,然后依次考虑每个人是否拿自己手中的题进行交换
  • 部分分到手
  • 对于一段连续的 0 0 0只会弹出最大的那个元素,对于一段连续的 1 1 1只会弹出最小的那个元素
  • 如果相邻的两个堆满足 m a x [ i ] ≤ m i n [ i + 1 ] max[i]\le min[i+1] max[i]min[i+1],那么我们可以交换两个堆的位置。我们只需要说明任何 v v v经过两个堆过后弹出的元素相同并且 m a x [ i ] ≥ m i n [ i + 1 ] max[i]\ge min[i+1] max[i]min[i+1]。后者是显然的。前者也是显然的
  • 那么现在我们可以合并了。
  • 考虑分析复杂度。如果满足 m a x [ i ] > m i n [ i + 1 ] max[i]>min[i+1] max[i]>min[i+1]那么一定会发生变化
  • 设当前有 L L L对堆。重叠部分 ∑ ϕ ( i ) = k \sum \phi(i)=k ϕ(i)=k,那么根据鸽巢原理在期望状态下经过 2 k L \frac{2k}{L} L2k轮后至少有一半 ϕ ( i ) \phi(i) ϕ(i)变成 0 0 0,那么就会有一半的堆被合并掉
  • 复杂度 O ( k log ⁡ 2 k ) O(k\log^2 k) O(klog2k)
  • AC Code
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值