LOJ 北校门外的回忆 倍增+线段树
正解:倍增+线段树
解题报告:
$umm$这题有个对正解毫无启发的部分分还有个正解,都挺神仙的所以我都写了趴$QAQ$
先说部分分
可以考虑把$x$向$x+lowbit(x)$连边,然后当$x+lowbit(x)$已经大于$n$了就指向一个超级根
这样儿每次执行一次$(x,v)$操作就相当于在树上一条链上的每个点全部$xor=v$,然后查询就是单点查询权值
然后就线段树或者树状数组维护一波就好$QwQ$
这里可以解决$n\leq 2e5$的部分分辣
然后就港下正解
首先考虑$k$是奇数有什么特殊性质嘛
然后就可以发现,其实这个$x+=lowbit(x)$的操作相当于是对它的最后一位的那个数$\times 2$然后如果要进位就进位嘛
可以发现,如果k是奇数,那不管$lowbit(x)$怎么$\times 2$,始终是不会变成$0$的对趴
那不会变成$0$的话就是说最低有$1$的位置是不变的
所以依然考虑连边这样子,就会是除了根节点以外所有点都是只有唯一父亲和唯一儿子节点的,也就是说去掉根节点它就是很多条链
然后再看这个操作,就相当于是对这条链上的后缀全部异或$v$
所以用个树状数组或者线段树维护一下就好$QwQ!$
然后继续考虑$k$是偶数怎么搞
设$k=p\cdot 2^q$
可以发现当$x$是$2^q$的倍数的时候它同样是会在一条链上的,原因很显然昂就可以考虑$x$和$k$同时除以$2^q$然后$k$就变成奇数了就一样的道理了嘛
所以只要对$x$不是$2^q$的倍数的维护一下就好
然后下面详细说下对于$x$不是$2^q$的倍数的,说它要维护是因为它不能保证一直$\times 2$之后能保持在一条链上嘛,但是可以这么想,我每次都是$\times 2$,设$x=t\cdot 2^w$,因为现在已知$w<q$了,那么就知道每次$\%k$是不会导致$w$变小的,那相当于就每次都是$w++$,那当$w$加到了$q$的时候就满足$x$是$2^q$的倍数了就说已经跳到链上了,就可以继续当做上面一种情况搞就成了
然后瞎分析一下复杂度,,,其实我不会证,所以下面这段只是搬运一下,,,
考虑每暴力走一步最低非零位值包含的$2$的因子个数就会$+1$,那么在最低位不变的情况下最坏只需要暴力走$p$次
而最低非零位就发生了改变的次数是小于等于$log_k n$次的,所以总复杂度是$O(log_2 n)$
好以上是,$n\leq 2e5$,为什么$n\leq 1e9$要特殊考虑呢,因为本来上面这个我直接树状数组或者线段树维护一波就欧克
然而,当$n\leq 1e9$的时候树状数组是开不下了的,要考虑用个离散化+树状数组或者动态开点线段树或者平衡树解决
然后唯一的问题就变成了怎么确定一个点所在的链,这个可以通过确定链的链首确定
咕咕咕咕咕咕.
LOJ 北校门外的回忆 倍增+线段树的更多相关文章
- LOJ#510. 「LibreOJ NOI Round #1」北校门外的回忆(线段树)
题面 传送门 题解 感谢\(@M\_sea\)的代码我总算看懂题解了-- 这个操作的本质就是每次把\(x\)的\(k\)进制最低位乘\(2\)并进位,根据基本同余芝士如果\(k\)是奇数那么最低位永远 ...
- LOJ#510 北校门外的回忆(找性质+倍增+线段树)
这题一场模拟赛我们出了弱化版(n<=1e6),抄题面给的程序能拿到71分的好成绩 其实后面的29分是加了几个1e9的数据卡人 这糟老头子真是坏得很 正解我们机房看了三天 在这里感谢这篇题解的作者 ...
- bzoj 3226 [Sdoi2008]校门外的区间(线段树)
3226: [Sdoi2008]校门外的区间 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 615 Solved: 227[Submit][Stat ...
- 3226. [SDOI2008]校门外的区间【线段树】
Description 受校门外的树这道经典问题的启发,A君根据基本的离散数学的知识,抽象出5种运算维护集合S(S初始为空)并最终输出S.现在,请你完成这道校门外的树之难度增强版——校门外的区间. ...
- LOJ 510: 「LibreOJ NOI Round #1」北校门外的回忆
题目传送门:LOJ #510. 题意简述: 给出一个在 \(K\) 进制下的树状数组,但是它的实现有问题. 形式化地说,令 \(\mathrm{lowbit}(x)\) 为在 \(K\) 进制下的 \ ...
- 【codeforces666E】Forensic Examination 广义后缀自动机+树上倍增+线段树合并
题目描述 给出 $S$ 串和 $m$ 个 $T_i$ 串,$q$ 次询问,每次询问给出 $l$ .$r$ .$x$ .$y$ ,求 $S_{x...y}$ 在 $T_l,T_{l+1},...,T_r ...
- LOJ #2359. 「NOIP2016」天天爱跑步(倍增+线段树合并)
题意 LOJ #2359. 「NOIP2016」天天爱跑步 题解 考虑把一个玩家的路径 \((x, y)\) 拆成两条,一条是 \(x\) 到 \(lca\) ( \(x, y\) 最近公共祖先) 的 ...
- 【XSY2534】【BZOJ4817】树点涂色 LCT 倍增 线段树 dfs序
题目大意 Bob有一棵\(n\)个点的有根树,其中\(1\)号点是根节点.Bob在每个点上涂了颜色,并且每个点上的颜色不同.定义一条路径的权值是:这条路径上的点(包括起点和终点)共有多少种不同的颜 ...
- LOJ #2537. 「PKUWC 2018」Minimax (线段树合并 优化dp)
题意 小 \(C\) 有一棵 \(n\) 个结点的有根树,根是 \(1\) 号结点,且每个结点最多有两个子结点. 定义结点 \(x\) 的权值为: 1.若 \(x\) 没有子结点,那么它的权值会在输入 ...
随机推荐
- 14.libgdx的一些坑记录(持续更新)
1. internal的文件路径 无法用list获取目录下文件 2.动态打包散图无法放入资源管理器,只能在资源加载器打包后的散图再合成打包,但都不如提前打包 3.资源加载器读入以texture ...
- mapping数据列表
- 2015年热门的国产开源软件TOP 50
2015年热门的国产开源软件TOP 50 开源中国在 2015 年得到了快速的发展,单开源软件收藏量就接近 40000 款,其中不乏优质的国产开源项目.本文从软件的收藏.下载.访问等多角度挑选出了 2 ...
- Android ListView性能优化实例讲解
前言: 对于ListView,大家绝对都不会陌生,只要是做过Android开发的人,哪有不用ListView的呢? 只要是用过ListView的人,哪有不关心对它性能优化的呢? 关于如何对ListVi ...
- 全文检索 java Lucene
索引文件:[D:\luceneDemo\data\TXT小说\陛下是妻迷.txt] 大小:[1185.0 KB] 索引文件:[D:\luceneDemo\data\TXT小说\随身空间重生在七十年代. ...
- 禁用gpu首选
import osos.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID"os.environ["CUDA_VIS ...
- Tensorflow中tf.ConfigProto()详解
参考Tensorflow Machine Leanrning Cookbook tf.ConfigProto()主要的作用是配置tf.Session的运算方式,比如gpu运算或者cpu运算 具体代码如 ...
- jq on绑定事件off移除事件
https://www.cnblogs.com/sandraryan/ 以前用的是bind(); 后来更新后用的on (on() 方法是 bind().live() 和 delegate() 方法的新 ...
- 关于 FormData 和 URLSearchParams
一.FormData FormData 接口提供了一种表示表单数据的键值对的构造方式,经过它的数据可以使用 XMLHttpRequest.send() 方法送出,本接口和此方法都相当简单直接.如果送出 ...
- ThinkPHP 模版中的内置标签
内置标签就是模版引擎提供的一组可以完成控制.循环和判断功能的类似HTML语法的标签. 一.判断比较: 1.if标签进行条件判断 //if语句的完整格式 <if condition=&qu ...