正解:倍增+线段树

解题报告:

传送门!

$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. git 练习

    删除文件 git rm test.txt git  commit -m 'remove test.txt' 回复到最新版本 git checkout -- test.txt git checkout ...

  2. win10 子系统ubuntu中文乱码

    ### . 查看系统是否支持中文 locale -a ### . 如不支持需安装中文包 apt-get install language-pack-zh-hans -y ### . 添加中文支持 lo ...

  3. POJ1664 放苹果

    #include <iostream> #include <cstdio> #include <cstring> using namespace std; int ...

  4. H3C 命令行帮助特性(续)

  5. 全文检索 java Lucene

    索引文件:[D:\luceneDemo\data\TXT小说\陛下是妻迷.txt] 大小:[1185.0 KB] 索引文件:[D:\luceneDemo\data\TXT小说\随身空间重生在七十年代. ...

  6. xshell评估期已过怎么办

    重新下载更新即可,不要看到英文一脸懵逼,直接在页面中有红色*号的地方输入个人信息,licensetype 必须选 Home and School use(家庭和个人使用),最主要的是输入邮箱(必须是个 ...

  7. Java Annotation详解(一): 理解和使用Annotation

    JDK1.5之后,引入了元数据的概念,也就是Annotation(注释),其实它是代码里的特殊标记,这些标记可以再编译.类加载.运行时被读取,并执行相应的处理. 元数据的作用: 如果要对于元数据的作用 ...

  8. Linux中ifcfg-eth0配置参数说明

    ifcfg-eth0在/etc/sysconfig/network-scripts下, 其配置如下: DEVICE=物理设备名IPADDR=IP地址NETMASK=掩码值NETWORK=网络地址BRO ...

  9. [转]SpringBoot整合Swagger2以及生产环境的安全问题处理

    1.创建springboot项目 https://www.cnblogs.com/i-tao/p/8878562.html 这里我们使用多环境配置: application-dev.yml(开发环境) ...

  10. 微信小程序中 不点击picker 点击一个button 怎么调用picker 弹出选择框

    把按钮放在picker区域里就好了 picker本身就是一个区域 <picker mode = "selector" class='info' bindchange=&quo ...