Luogu5889 跳树
原题链接: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)+1
和v>>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 跳树相关推荐
- PKUWC2020游记与题面整理
游记 很久之前 jxp玄学卡线THU和PKU都没有进,默哀. 我校似乎只剩hyw神仙和我了啊--希望好运 12.19 晚上到了北京,住在熟悉的地方--中关新园.我大概在这里考过PKUSC2018和PK ...
- LeCun、Bengio等人联名发布:迈向下一代人工智能!催化NeuroAI革命!AI 迎来具身图灵测试大挑战...
点击下方卡片,关注"CVer"公众号 AI/CV重磅干货,第一时间送达 点击进入-> CV 微信技术交流群 AI 要通过具身图灵测试,必须与世界互动.具有灵活性.提高能源效率 ...
- 开讲啦超级计算机是几季,《开讲啦》第二季成龙:没人能替你奋斗
同学们好: 我今天想跟大家讲奋斗.昨天还有朋友问我:"大哥,你有没有想到你有今天?"我说我真的没有想到,有时候每一次刷牙洗脸,我看看自己真是个奇迹. 我怎么会变成今天这个样子呢?我 ...
- 从ZETA无线通信技术特点出发选择合适的物联网协议
-- 作者 | 纵行科技ZETA协议开发部 -- 业务背景:随着物联网技术的快速发展,正越来越多地在农业.工业.楼宇.资产跟踪.智能计量和智慧城市等多个领域中得到应用.物联网应用有其特定的要求,例如距 ...
- Git - ‘假设未改变‘和‘跳过工作树‘之间的区别
本文翻译自:Git - Difference Between 'assume-unchanged' and 'skip-worktree' I have local changes to a file ...
- CodeForces - 1437G Death DBMS(AC自动机fail树上树链剖分建线段树/暴跳fail)
题目链接:点击查看 题目大意:给出 n 个模式串,每个模式串初始时的权值为 0,然后有 m 次操作: 1 i x:将第 i 个模式串的权值修改为 x 2 s:给出一个字符串 s,询问字符串 s 作为主 ...
- POJ - 2201 Cartesian Tree(笛卡尔树-单调栈/暴跳父亲)
题目链接:点击查看 题目大意:给出n个节点的key和val,构造出其笛卡尔树的原型 笛卡尔树的定义: 所谓笛卡尔树,就是将给定的n个二元组(key,val)建成一棵树.使得: 如果只关注key,那么这 ...
- 红黑树、B(+)树、跳表、AVL对比
在网上学习了一些材料. 这一篇:https://www.zhihu.com/question/30527705 AVL树:最早的平衡二叉树之一.应用相对其他数据结构比较少.windows对进程地址空间 ...
- mysql 跳表 b 树_简单谈谈Mysql索引与redis跳表
摘要 面试时,交流有关mysql索引问题时,发现有些人能够涛涛不绝的说出B+树和B树,平衡二叉树的区别,却说不出B+树和hash索引的区别.这种一看就知道是死记硬背,没有理解索引的本质.本文旨在剖析这 ...
- 2023牛客寒假算法基础集训营4_20230130「向上取整」「夹逼dp」「lowbit科学+树状数组性质」「搜索」「倍增跳表」「莫队」
6/13 教育场是有被教育到.(预计会鸽几题. 已过非太水的题们 //B //https://ac.nowcoder.com/acm/contest/46812/B//小构造小数学#include & ...
最新文章
- 每周.NET前沿技术文章摘要(2017-05-24)
- mysql存入mtr数据_mysql mtr写入数据
- 更新FreeBSD Ports的方法
- html的搜索框代码怎么写_网站新闻怎么写才能被搜索引擎收录?
- iOS中真机连接电脑运行程序出现问题
- 机器学习-西瓜书、南瓜书第四章
- Qt获取系统时间并格式化输出
- 系统同传软件_影视翻译软件可实时在线翻译多国语言
- SuperMap GIS 10i软件概览
- 瑞萨RH850芯片在IAR和CS+编译环境下设置堆(heap)和栈(stack)的大小
- matlab怎么导入数据格式,Matlab导入Excel文件中的数据的详细教程分享
- 外贸常用术语_外贸业务中常用的术语
- VSCode C++ control reaches end of non-void function [-Wreturn-type]
- 奇异值分解(SVD)
- data协议,好玩,好用
- 怎么把html文档转换成wps,怎么把wps文档转换成word文档
- andorid之摄像头驱动流程
- 淘宝主图优化技巧 测试淘宝女鞋主图点击率方法
- java在浏览器闪退_selenium chrome 浏览器闪退
- python无法定位到table_爬虫无法定位到tbody下的tr求助!!!!