[Codeforces 1100F]Ivan and Burgers(线性基)

本文详细介绍了如何利用线性基解决Codeforces 1100F问题,即最大异或和子集。文章讨论了两种解决方案,一种是O(nlog2c)复杂度的方法,通过离线排序和区间扫描来维护不同线性基;另一种是O(nlogc)的优化方案,只维护一个线性基,并利用基变量的pos属性来减少无效操作。这两种方法都适用于处理n=5×10^5级别的数据,展示了线性基在处理区间查询问题上的高效性。
摘要由CSDN通过智能技术生成

Address

Solution

  • 一道好题
  • 看到「最大异或和子集」,很容易想到线性基
  • 然后看到区间限制,直接想到线段树维护线性基,合并信息时 O ( log ⁡ 2 c ) O(\log^2c) O(log2c) 合并线性基
  • 然后你会发现你 TLE 了, O ( n log ⁡ n log ⁡ 2 c ) O(n\log n\log^2c) O(nlognlog2c) 的复杂度在 n n n 5 × 1 0 5 5\times10^5 5×105 级别的数据下显然是跑不进 3s 的……
  • 我们需要考虑复杂度更为优秀的做法

O ( n log ⁡ 2 c ) O(n\log^2c) O(nlog2c)

  • 可以得到,如果固定右端点 r r r ,左端点 l l l [ 1 , r ] [1,r] [1,r] 内的任意一点,将 c c c 的区间 [ l , r ] [l,r] [l,r] 内的数构成线性基,那么能够得到的本质不同的线性基只有 O ( log ⁡ c ) O(\log c) O(logc)
  • 且本质相同的线性基对应的 l l l 是一段区间
  • 证明:显然如果区间 [ l − 1 , r ] [l-1,r] [l1,r] 的数构成的线性基和区间 [ l , r ] [l,r] [l,r] 的数构成的线性基不同,那么 [ l − 1 , r ] [l-1,r] [l1,r] 的线性基一定比 [ l , r ] [l,r] [l,r] 的线性基多一个基变量
  • 而基变量最多只有 O ( log ⁡ c ) O(\log c) <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值