【填算符】(log 值域的做法)
填算符
下发题解说的神马东西,赛时根本想不到
讲一个赛时想得到的 \(O(n\log 值域)\) 的思路,很好理解
我们处理出二进制下每一位上的 1 的最后一次出现的位置,将第 \(i\ (i\in[0,60])\) 位上的 1 最后一次出现的位置记作 \(pos_i\)
同时我们设 \(H=n-k-1\) 为总共有的 bitor 的操作数
有以下结论:由于 \(pos_i\) 是 \(i\) 位上最后一个 1,所以一旦它后面放了一个 与,这一位上就是 0 了;若我们想要这一位为 1,必须至少满足从 \(pos_i\) 到最后的运算符全是 bitor。
发现有以下情况:
若 \(n-pos_i>H\),即 \(pos_i\) 之后需要放的运算符的数量比
bitor的总操作数多,也就是说在 \(pos_i\) 之后我一定需要放bitand操作,所以这种情况下这一位一定不对答案有贡献若 \(n-pos_i<H\),也就是说我可以从 \(pos_i\) 的前一个位置开始到最后全放
bitor操作,那么这样第 \(i\) 位上可以是 1,为了使值最大,所以第 \(i\) 位上一定要是 1,所以从第 \(pos_i\) 位到最后必须全是bitor操作,对于这种情况的 \(i\) 我们记为合法位若 \(n-pos_i=H\),也就是说从第 \(pos_i\) 到最后的运算符可以全是
bitor操作,但 \(pos_i\) 的前一位只能是bitand
所以我们特判从第 1 个位置到 \(pos_i\) 的前一位全放bitand能不能让到第 \(pos_i\) 个数时得到的值第 $\forall $ \(j 满足 [pos_j=pos_i]\) 位为 1,若能则该位也为合法位,否则不合法
对于所有合法位的 \(pos\) 取最小值设为 \(end\),因为已经保证 \(end\) 到最后的预算符全是 bitor,此时有一下两种可能,而我们想尽量构成第二种可能:
\(end\) 的前一位预算符也为
bitor,这样我们一定能达到答案最大了,想使答案最优直接让从 \(end-2\) 开始的 \(k\) 个运算符为bitor就好了\(end\) 的前一位在某些情况为
bitand也是可以使答案最大的,所以我们判断能不能让 \(end\) 的前一位为bitand同样使答案最大;
发现可以的条件相当于从第 \(end-1\) 个数到最前面用仅剩的bitor操作得到一个答案,使得这个答案第 $\forall $ \(i 满足 [pos_i=end]\) 位为 1,若能满足条件则第 \(end-1\) 个操作符为bitand。
满足条件的判断又和上述的第三个情况判断一致了,相当于以 \(end-1\) 为下界,再做一次求 \(min(合法的\ pos)\),实质上是不断的递归。
所以一个递归 \(dfs(end, H)\) 表示下界为 \(end\),还剩 \(H\) 个 bitor 操作,判断能不能得到我想要的答案:
若不能则直接从第 \(end-2\) 开始的 \(k-res\) 个运算符全为 bitand 就是答案(\(res\) 为在之前的递归中已经确定的 bitand 的个数)
若能则第 \(end-1\) 个位置可以为 bitand,并设 \(end'=min(这一层中合法的\ pos)\),继续递归 \(dfs(end',H-(end-end'))\) 判断第 \(end'-1\) 个位置能不能为 bitand。
形式化如下:

【填算符】(log 值域的做法)的更多相关文章
- 1473. [Ioi2000]Post加强版 n log^2 n做法
1473. [Ioi2000]Post加强版 n log^2 n做法 题面 有n个城市从负方向向正方向按照1至n标号,\(d[i]\)表示城市i离原点的距离并且\(d[1] = 0\),对于\(i \ ...
- POJ 2533 Longest Ordered Subsequence LCS O(n*log(n))
题目链接 最长上升子序列O(n*log(n))的做法,只能用于求长度不能求序列. #include <iostream> #define SIZE 1001 using namespace ...
- 解读Android LOG机制的实现【转】
转自:http://www.cnblogs.com/hoys/archive/2011/09/30/2196199.html http://armboard.taobao.com/ Android提供 ...
- POJ 2533 Longest Ordered Subsequence LIS O(n*log(n))
题目链接 最长上升子序列O(n*log(n))的做法,只能用于求长度不能求序列. #include <iostream> #include <algorithm> using ...
- OI数学汇总
最前面:\(\LaTeX\)可能需要加载一会,请耐心等待o~ 前言 数学在\(\text{OI}\)中十分重要.其中大多都是数论. 什么是数论? \[ 研究整数的理论 --zzq \] 本文包含所有侧 ...
- [BZOJ]3110 K大数查询(ZJOI2013)
这大概是唯一一道小C重写了4次的题目. 姿势不对的树套树(Fail) → 分块(Fail) → 整体二分(Succeed) → 树套树(Succeed). 让小C写点心得静静. Description ...
- ZJOI2019Day2 游记
原文链接www.cnblogs.com/zhouzhendong/p/ZJOI2019Day2 游记 4-23 乘车. 报到. 自闭. 晚上没睡好. 4-24 上午张哲宇讲课. 幕后点人上去讲题. 然 ...
- AtCoder Grand Contest 1~10 做题小记
原文链接https://www.cnblogs.com/zhouzhendong/p/AtCoder-Grand-Contest-from-1-to-10.html 考虑到博客内容较多,编辑不方便的情 ...
- BZOJ2724 [Violet]蒲公英 分块
题目描述 经典区间众数题目 然而是权限题,所以题目链接放Luogu的 题解 因为太菜所以只会$O(n*\sqrt{n}+n*\sqrt{n}*log(n))$的做法 就是那种要用二分的,并不会clj那 ...
- 租酥雨的NOIP2018赛前日记
租酥雨的NOIP2018赛前日记 离\(\mbox{NOIP2018}\)只剩下不到一个月的时间辣! 想想自己再过一个月就要退役了,觉得有必要把这段时间的一些计划与安排记录下来. 就从国庆收假开始吧. ...
随机推荐
- Codeforces Round 964 (Div. 4) D. Slavic's Exam
题目链接:https://codeforces.com/contest/1999/problem/D 题目描述 Slavic 的考试非常难,需要您的帮助才能通过.以下是他正在努力解决的问题: 存在一个 ...
- ARMv8-A 地址翻译技术之MMU的前世今生
MMU的重要性不言而喻,支撑操作系统之上的各种复杂应用.但在正式讲MMU之前,我们先说说MMU的发展史,因为ARMv8-A的MMU相当复杂,直接切入正题,会显得比较枯燥.废话不多说,咱们马上开始: 一 ...
- 到底什么是Cortex、ARMv8、arm架构、ARM指令集、soc?一文帮你梳理基础概念【科普】
前言 有粉丝问我到底什么是ARM,搞不清楚Cortex.arm内核.arm架构.ARM指令集.soc这些概念都是什么关系,下面一口君给大家整理一下关于ARM相关的一些概念. 1.ARM既可以认为是一个 ...
- C#/.NET/.NET Core技术前沿周刊 | 第 1 期(2024年8.12-8.18)
前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录.追踪C#/.NET/.NET Core领域.生态的每周最新.最实用的技术文章.社区动态.优质项目和学习资源等.让你时刻站 ...
- Win32 动态库dll
这两天学习动态库的练习,分享下方法 实例.封装窗口类的两种状态. 1.自定义窗口类QWnd 2.资源模板窗口对话框类 下面是dll的头文件,类的声明 #pragma once #ifndef _CLA ...
- WPF 模仿前端大佬写一个Hover效果
先看一下效果吧: 原博主的地址:[动画进阶]神奇的卡片 Hover 效果与 Blur 的特性探究 - ChokCoco - 博客园 (cnblogs.com) 原效果是一个css效果,我们采用WPF的 ...
- Vue 子组件修改父组件传递过来的值
实现效果:通过点击选中的按钮控制左边的树是否进行展示 子组件篇: <el-button v-if="isShowTree&hasTree" type="te ...
- 图解Zabbix设置邮件报警
Zabbix设置邮件告警 前提条件: Zabbix Server 和 Zabbix Agent都已安装完毕,并已启动 1.添加主机 2.配置邮件告警,这里以VSFTP服务为例 yum in ...
- 2024.7.5-2024.7.20 HA省学会集训游记(焦作一中)
这是一篇长篇小说 DAY1 除了DAY4-DAY5个别内容以外,这些都是补的,但是全写完有太多了qwq,挑题写了 树状数组和线段树基础 很多都是一些模板题,太模板的题不再做太多解释 题目: P4062 ...
- SpringMVC —— 入门案例执行流程
启动服务器初始化过程 1.服务器启动,执行ServletContainersInitConfig类,初始化web容器 2.执行createServletApplicationContext方法, ...