【meet in the mid】【qbxt2019csp刷题班day1C】birthday
Description
给定一个长度为 \(n\) 序列,值域为 \([1, v]\),每次选择一段区间,要求在这个区间上选择一些元素加入到两个集合中,每个元素要么不选要么只能加入一个集合,要求两个集合非空且元素和相等,问能否实现。
同时要求区间修改元素为自身的立方对 \(v\) 取模的结果。
Limatations
\(1 \leq n \leq 10^5\),\(1 \leq v \leq 1000\)
Solution
考虑一段长度为 \(len\) 的区间,考虑每个点有选入集合和不选入集合两种可能,所以所有选择的种数一共有 \(2^{len}\) 种。考虑由于值域为 \(v\),所以可能出现的权值和一共有 \(len \times v\) 种。考虑当 \(2^{len} > len \times v\) 时,一定至少有两个不同的选择得到了相同的权值。考虑这两个选择可能会选择相同的元素,那么直接将这些相同的元素都去掉,由于去掉的元素相同,最终得到的权值和依然是相同的,并且两个集合无交。因此这种情况一定能实现。
解方程
\[2^{len} > len \times v\]
两侧同时取 \(\log\),整理得
\[len - \log len > \log v\]
显然 \(v\) 取最大值时,左侧取最大值,因此有
\[len - \log len > 10\]
显然当 \(len\) 充分大时,左侧的值与 \(len\) 正相关,枚举 \(len\) 得到
\[len > 13\]
因此当 \(len \geq 14\) 时,可以直接输出 \(Yes\),下面考虑 \(len \leq 13\) 的情况。
考虑最简单的方法是爆搜,枚举每个元素不选还是选入集合 \(A\) 还是选入集合 \(B\),时间复杂度 \(O(3^{len})\),由于一共有 \(m\) 次查询,时间复杂度超标。
考虑进行 meet in the middle,先搜索区间前 \(6\) 个元素的所有情况,记录所有可能的 \(A\) \(B\) 两集合元素和之差,再搜索区间后 \(7\) 个元素的情况,同样记录所有可能的元素和之差。一旦有一个差在两侧都有出现,那么只需要一个集合左边选较大的右边选较小的;另一个集合左边选较小的右边选较大的,即可得到两个合法的集合,反之则不能得到。
因此这这样的复杂度为 \(O(2^{len / 2})\),由于有 \(m\) 次操作,实际运算量与 \(2^7 \times m\) 同阶,可以通过本题。
考虑区间修改操作,只需要分块或者线段树即可快速维护。
Summary
zxy 天下第一
【meet in the mid】【qbxt2019csp刷题班day1C】birthday的更多相关文章
- 【套题】qbxt国庆刷题班D2
D2 今天的题感觉还是好妙的 T1 传送门 Description 现在有一张\(n\)个节点\(m\)条边的无向连通图\(G=(V,E)\),满足这张图中不存在长度大于等于3的环且图中没有重边和自环 ...
- 【套题】qbxt国庆刷题班D1
Day1 事实上D1的题目还是比较简单的= =然而D1T2爆炸了就十分尴尬--错失一波键盘 看题 T1 传送门 Description 现在你手里有一个计算器,上面显示了一个数\(S\),这个计算器十 ...
- 10.24afternoon清北学堂刷题班
/* 这是什么题... */ #include<iostream> #include<cstdio> #include<cstring> #include<q ...
- 清北刷题班day3 morning
P99zhx: 竞赛时间:???? 年?? 月?? 日??:??-??:??题目名称 a b c名称 a b c输入 a.in b.in c.in输出 a.out b.out c.out每个测试点时限 ...
- 提高组刷题班 DAY 1 上午
低仿机器人(robo,1s,64M) 题解 大模拟 代码 #include <cstdio> #include <cstring> #include <iostream& ...
- 10.27night清北刷题班
/* 枚举每个部分的总和,利用前缀和进行检验. 如果能分成4部分就一定能分成2部分,就筛了一边素数优化.清空数组!!! */ #include<bits/stdc++.h> #define ...
- 【BZOJ-4590】自动刷题机 二分 + 判定
4590: [Shoi2015]自动刷题机 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 156 Solved: 63[Submit][Status ...
- NOI题库分治算法刷题记录
今天晚自习机房刷题,有一道题最终WA掉两组,极其不爽,晚上回家补完作业欣然搞定它,特意来写篇博文来记录下 (最想吐槽的是这个叫做分治的分类,里面的题目真的需要分治吗...) 先来说下分治法 分治法的设 ...
- BZOJ4590 自动刷题机
Description 曾经发明了信号增幅仪的发明家SHTSC又公开了他的新发明:自动刷题机--一种可以自动AC题目的神秘装置.自动 刷题机刷题的方式非常简单:首先会瞬间得出题目的正确做法,然后开始写 ...
随机推荐
- vertica单节点故障恢复 Startup Failed, ASR Required
测试环境的vertica是单节点的,无法做到故障自动恢复,需要手工处理.案例如下: 发现5433端口连接不上,vertica挂了,手工运行admintools,重新启动vertica,仍然失败,提示: ...
- Linux : Ubuntu 安装 RabbitMQ
安装 Erlang: 手动编译(不推荐)http://www.erlang.org/downloads下载源码 如22版本:http://erlang.org/download/otp_src_22. ...
- Blend 硬货 绑定
原文:Blend 硬货 绑定 开始讲一点 硬技能 怎么用Blend实现绑定 效果 详细说一下绑定 1)default 2)OneTime 3) One Way 4)TwoWay 5) OneWayto ...
- 用友 U9 常用的东西
系统资源 数据字典 UI组件 UI参照组件 BE组件 BP组件 SV组件
- oracle 获取表\视图的列名
select COLUMN_NAME FROM user_col_comments WHERE TABLE_NAME='视图名' select COLUMN_NAME from all_tab_c ...
- GitHub 上受欢迎的 Android UI Library整理
https://github.com/Tapadoo/Alerter ★2528 - 克服Toast和Snackbar的限制 https://github.com/wenmingvs/NotifyUt ...
- tempermonkey文档及为google翻译添加清除输入框脚本
想通过tempermonkey为google增加一个清除输入框的快捷键,这本来是很好做的事情,后来也证明确实是那么简单,不过中间遇到了几个奇怪的问题,有必要记录一下 tempermonkey 文档:h ...
- Linux C 后台服务程序单进程控制
介绍 通常后台服务器程序都必须有且只有一个进程,那么如何单进程呢? 本例子是通过flock函数对/var/run/myserver.pid记录pid文件的进行加锁 若加锁不正常,说明后台服务进程已经在 ...
- 开机注册联通2G网络
2/3G PLMN LIST 在MM_RATCM_PLMN_LIST_CNF或NWSEL_MM_PLMN_SEARCH_CNF消息中可以查看2,3G搜到的PLMN LIST 内容如下: RAT:Rad ...
- Excel 使用VBA或宏----简单笔记
一.一种纯粹的录制宏.(未使用此方法,如有兴趣可自学),就是Excel提供了“所见即所得”的方式生成宏.把自己想要的操作记录,录制成宏. 自学网等各种网站有教学视频或文章 二.常用VBA语法及函数笔记 ...