正解:倍增+线段树

解题报告:

传送门!

$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 北校门外的回忆 倍增+线段树的更多相关文章

  1. LOJ#510. 「LibreOJ NOI Round #1」北校门外的回忆(线段树)

    题面 传送门 题解 感谢\(@M\_sea\)的代码我总算看懂题解了-- 这个操作的本质就是每次把\(x\)的\(k\)进制最低位乘\(2\)并进位,根据基本同余芝士如果\(k\)是奇数那么最低位永远 ...

  2. LOJ#510 北校门外的回忆(找性质+倍增+线段树)

    这题一场模拟赛我们出了弱化版(n<=1e6),抄题面给的程序能拿到71分的好成绩 其实后面的29分是加了几个1e9的数据卡人 这糟老头子真是坏得很 正解我们机房看了三天 在这里感谢这篇题解的作者 ...

  3. bzoj 3226 [Sdoi2008]校门外的区间(线段树)

    3226: [Sdoi2008]校门外的区间 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 615  Solved: 227[Submit][Stat ...

  4. 3226. [SDOI2008]校门外的区间【线段树】

    Description   受校门外的树这道经典问题的启发,A君根据基本的离散数学的知识,抽象出5种运算维护集合S(S初始为空)并最终输出S.现在,请你完成这道校门外的树之难度增强版——校门外的区间. ...

  5. LOJ 510: 「LibreOJ NOI Round #1」北校门外的回忆

    题目传送门:LOJ #510. 题意简述: 给出一个在 \(K\) 进制下的树状数组,但是它的实现有问题. 形式化地说,令 \(\mathrm{lowbit}(x)\) 为在 \(K\) 进制下的 \ ...

  6. 【codeforces666E】Forensic Examination 广义后缀自动机+树上倍增+线段树合并

    题目描述 给出 $S$ 串和 $m$ 个 $T_i$ 串,$q$ 次询问,每次询问给出 $l$ .$r$ .$x$ .$y$ ,求 $S_{x...y}$ 在 $T_l,T_{l+1},...,T_r ...

  7. LOJ #2359. 「NOIP2016」天天爱跑步(倍增+线段树合并)

    题意 LOJ #2359. 「NOIP2016」天天爱跑步 题解 考虑把一个玩家的路径 \((x, y)\) 拆成两条,一条是 \(x\) 到 \(lca\) ( \(x, y\) 最近公共祖先) 的 ...

  8. 【XSY2534】【BZOJ4817】树点涂色 LCT 倍增 线段树 dfs序

    题目大意 ​ Bob有一棵\(n\)个点的有根树,其中\(1\)号点是根节点.Bob在每个点上涂了颜色,并且每个点上的颜色不同.定义一条路径的权值是:这条路径上的点(包括起点和终点)共有多少种不同的颜 ...

  9. LOJ #2537. 「PKUWC 2018」Minimax (线段树合并 优化dp)

    题意 小 \(C\) 有一棵 \(n\) 个结点的有根树,根是 \(1\) 号结点,且每个结点最多有两个子结点. 定义结点 \(x\) 的权值为: 1.若 \(x\) 没有子结点,那么它的权值会在输入 ...

随机推荐

  1. 看看国外的JavaScript题目

    ---恢复内容开始--- 题目一 (function(){    return typeof arguments;})(); 答案:“object” arguments是对象,伪数组有两件事要注意这里 ...

  2. PHP header 的7种用法

    这篇文章介绍的内容是关于PHP header()的7种用法 ,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 PHP header 的7种用法 1. 跳转页面 header('Locat ...

  3. mysql查询包含逗号的数据,并逗号拆分为多行展现

    在做系统开发的时候,有可能是由于之前的遗留问题,导致在数据入库的时候,将多个数据以逗号分隔的实行,存储在一条数据中,例如: ID VALUE 1 yang,zheng,song 2 zhao,qian ...

  4. 06多次查询某区间内topk问题

            题目描述:给定一个数组,需要多次查找不同区间内的,第k大或者第k小的元素.         考虑题目是多次查找,如果采用只对查询区间内的元素进行排序的思路,然后输出第k大的数的策略,那 ...

  5. @codeforces - 631E@ Product Sum

    目录 @desription@ @solution@ @accepted code@ @details@ @desription@ 给定一个序列 a,定义它的权值 \(c = \sum_{i=1}^{ ...

  6. 【tensorflow】】模型优化(一)指数衰减学习率

    指数衰减学习率是先使用较大的学习率来快速得到一个较优的解,然后随着迭代的继续,逐步减小学习率,使得模型在训练后期更加稳定.在训练神经网络时,需要设置学习率(learning rate)控制参数的更新速 ...

  7. 如何查看redis内存使用情况

    https://jingyan.baidu.com/article/2c8c281dbd079f0008252a0f.html Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以 ...

  8. Python--day68--Django ORM的字段参数、元信息

    字段参数 null 用于表示某个字段可以为空. unique 如果设置为unique=True 则该字段在此表中必须是唯一的 . db_index 如果db_index=True 则代表着为此字段设置 ...

  9. 2018-8-10-win10-uwp-后台获取资源

    title author date CreateTime categories win10 uwp 后台获取资源 lindexi 2018-08-10 19:17:19 +0800 2018-2-13 ...

  10. 2018-8-10-使用-RetroShare-分享资源

    title author date CreateTime categories 使用 RetroShare 分享资源 lindexi 2018-08-10 19:16:51 +0800 2018-02 ...