原题链接:https://www.luogu.com.cn/problem/P5889

跳树

题目背景

兔子喜欢跳树。

题目描述

一天,兔子在一棵点数为 2n−12^n-12n−1 完全二叉树上的一个结点上,他准备进行若干次如下的跳跃。

  • 跳到这个点的左儿子,保证这个点有左儿子。
  • 跳到这个点的右儿子,保证这个点有右儿子。
  • 跳到这个点的父亲,若这个点是根,无视此操作。

其中,iii 号点要么没有儿子,要么有左儿子 2×i2 \times i2×i 和右儿子 2×i+12 \times i + 12×i+1。

兔子会计划性地跳树,他写下了一个长度为 mmm 的序列 opopop。opopop 中的每个数都是 111, 222, 333 中的一种。操作 iii 对应从上到下第 iii 种跳跃方式。

每次,兔子会选择一段区间 [l,r][l,r][l,r],依次进行跳跃 opl,opl+1,…,oprop_l,op_{l+1},\ldots,op_ropl​,opl+1​,…,opr​ 。

有时兔子会对一个点的 opopop 值进行修改。

现在你需要求出兔子每次会跳到哪个结点。

阅读样例解释可以对题意获得更好的理解。

输入格式

第一行三个整数 n,m,qn, m, qn,m,q,表示树的大小的幂次、opopop 的长度、操作的次数。

第二行包含 mmm 个整数 op1,2,…,mop_{1,2,\ldots,m}op1,2,…,m​ ,表示序列的初值。

接下来 qqq 行,每行一个整数 typetypetype,若 typetypetype 为 111,接下来三个整数s,l,rs,l,rs,l,r ,描述起点和进行跳跃的区间;若 typetypetype 为 222 ,接下来两个整数 x,yx,yx,y,描述修改的位置与值。

输出格式

对于每一个 type=1type=1type=1,输出一个数,表示跳跃到的结点。

输入输出样例

输入 #1
3 5 4
1 2 3 3 1
1 3 4 5
1 2 2 4
2 3 1
1 1 2 3
输出 #1
2
1
6

说明/提示


其中红边为第一次跳跃的路径,蓝边为第二次,绿边为第三次。

所有测试数据的范围和特点如下表所示:


对于 100%100\%100% 的数据,1≤n≤301\leq n \leq 301≤n≤30,1≤m,q≤5×1051\leq m,q \leq 5 \times 10^51≤m,q≤5×105 ,1≤opi≤31\leq op_i\leq 31≤opi​≤3。

题解

思路很简单,三个操作无非是对当前节点编号vvv做v<<1(v<<1)+1v>>1三种操作。如果没有第三种右移操作,则只需要维护左移位数lmovlmovlmov和需要出现跳右子树操作后需要加上的addaddadd,非常容易就可以从左向右进行合并。当加上右移操作后,我们可以发现,若右移操作在前面两种操作之后则可以抵消,但是右移操作却不能被右移之后的其他两种操作抵消,所以操作序列左端的右移操作是没有办法只用lmovlmovlmov和addaddadd完成维护的,还需要维护右移次数rmovrmovrmov。这样,对于单次询问,我们就可以求出一个关于跳树操作的三元组(rmov,lmov,add)(rmov,lmov,add)(rmov,lmov,add),询问的答案就是((s>>rmov)<<lmov)+add,注意判断右移后是否为000。

修改因为是单点的,非常简单,不多做赘述(个人认为可以出成区间修改)。

代码

这钵啊,这钵是一道水题调一天系列。

按理来说,由于n≤30n\le 30n≤30题目又保证跳向子树时子树存在,最终的节点编号一定是≤230−1\le 2^{30}-1≤230−1的,那么无论是rmov,lmovrmov,lmovrmov,lmov还是addaddadd都不应该超出intintint的范围,可是在纯用intintint时却出现了溢出的情况,不知是数据有误还是代码中有谬误。

其次就是当我#define int long long之后,只把输出的%d换成%lld,没有改输入,直接RE\mathcal{RE}RE,后来又只把addaddadd改成longlonglong\ longlong long等等……对拍也没有拍出来,做了大量无用调试,把

Luogu5889 跳树相关推荐

  1. PKUWC2020游记与题面整理

    游记 很久之前 jxp玄学卡线THU和PKU都没有进,默哀. 我校似乎只剩hyw神仙和我了啊--希望好运 12.19 晚上到了北京,住在熟悉的地方--中关新园.我大概在这里考过PKUSC2018和PK ...

  2. LeCun、Bengio等人联名发布:迈向下一代人工智能!催化NeuroAI革命!AI 迎来具身图灵测试大挑战...

    点击下方卡片,关注"CVer"公众号 AI/CV重磅干货,第一时间送达 点击进入-> CV 微信技术交流群 AI 要通过具身图灵测试,必须与世界互动.具有灵活性.提高能源效率 ...

  3. 开讲啦超级计算机是几季,《开讲啦》第二季成龙:没人能替你奋斗

    同学们好: 我今天想跟大家讲奋斗.昨天还有朋友问我:"大哥,你有没有想到你有今天?"我说我真的没有想到,有时候每一次刷牙洗脸,我看看自己真是个奇迹. 我怎么会变成今天这个样子呢?我 ...

  4. 从ZETA无线通信技术特点出发选择合适的物联网协议

    -- 作者 | 纵行科技ZETA协议开发部 -- 业务背景:随着物联网技术的快速发展,正越来越多地在农业.工业.楼宇.资产跟踪.智能计量和智慧城市等多个领域中得到应用.物联网应用有其特定的要求,例如距 ...

  5. Git - ‘假设未改变‘和‘跳过工作树‘之间的区别

    本文翻译自:Git - Difference Between 'assume-unchanged' and 'skip-worktree' I have local changes to a file ...

  6. CodeForces - 1437G Death DBMS(AC自动机fail树上树链剖分建线段树/暴跳fail)

    题目链接:点击查看 题目大意:给出 n 个模式串,每个模式串初始时的权值为 0,然后有 m 次操作: 1 i x:将第 i 个模式串的权值修改为 x 2 s:给出一个字符串 s,询问字符串 s 作为主 ...

  7. POJ - 2201 Cartesian Tree(笛卡尔树-单调栈/暴跳父亲)

    题目链接:点击查看 题目大意:给出n个节点的key和val,构造出其笛卡尔树的原型 笛卡尔树的定义: 所谓笛卡尔树,就是将给定的n个二元组(key,val)建成一棵树.使得: 如果只关注key,那么这 ...

  8. 红黑树、B(+)树、跳表、AVL对比

    在网上学习了一些材料. 这一篇:https://www.zhihu.com/question/30527705 AVL树:最早的平衡二叉树之一.应用相对其他数据结构比较少.windows对进程地址空间 ...

  9. mysql 跳表 b 树_简单谈谈Mysql索引与redis跳表

    摘要 面试时,交流有关mysql索引问题时,发现有些人能够涛涛不绝的说出B+树和B树,平衡二叉树的区别,却说不出B+树和hash索引的区别.这种一看就知道是死记硬背,没有理解索引的本质.本文旨在剖析这 ...

  10. 2023牛客寒假算法基础集训营4_20230130「向上取整」「夹逼dp」「lowbit科学+树状数组性质」「搜索」「倍增跳表」「莫队」

    6/13 教育场是有被教育到.(预计会鸽几题. 已过非太水的题们 //B //https://ac.nowcoder.com/acm/contest/46812/B//小构造小数学#include & ...

最新文章

  1. 每周.NET前沿技术文章摘要(2017-05-24)
  2. mysql存入mtr数据_mysql mtr写入数据
  3. 更新FreeBSD Ports的方法
  4. html的搜索框代码怎么写_网站新闻怎么写才能被搜索引擎收录?
  5. iOS中真机连接电脑运行程序出现问题
  6. 机器学习-西瓜书、南瓜书第四章
  7. Qt获取系统时间并格式化输出
  8. 系统同传软件_影视翻译软件可实时在线翻译多国语言
  9. SuperMap GIS 10i软件概览
  10. 瑞萨RH850芯片在IAR和CS+编译环境下设置堆(heap)和栈(stack)的大小
  11. matlab怎么导入数据格式,Matlab导入Excel文件中的数据的详细教程分享
  12. 外贸常用术语_外贸业务中常用的术语
  13. VSCode C++ control reaches end of non-void function [-Wreturn-type]
  14. 奇异值分解(SVD)
  15. data协议,好玩,好用
  16. 怎么把html文档转换成wps,怎么把wps文档转换成word文档
  17. andorid之摄像头驱动流程
  18. 淘宝主图优化技巧 测试淘宝女鞋主图点击率方法
  19. java在浏览器闪退_selenium chrome 浏览器闪退
  20. python无法定位到table_爬虫无法定位到tbody下的tr求助!!!!

热门文章

  1. Ubuntu sudo nopasswd方法
  2. 使用wireshark对HTTPS解密
  3. 《Web漏洞防护》读书笔记——第12章,CSRF跨站点请求伪造防护
  4. [POI2013]LUK-Triumphal arch
  5. 解决ajax跨域的方法原理详解之Cors方法
  6. 解决Eclipse10配置Pydev不成功的问题
  7. spm_预处理实验记录
  8. 从JS库的使用者转变成JS的开发者——第一篇 javascript对象
  9. RayTracing练习
  10. mysql 清理relay日志_Mysql 删除从数据库的relay logs最佳方式、最安全方式