trick : Trygub num
trick大意
我对于这个trick的理解为:支持位运算的高精度
维护一个以 \(b\)为基数的大数 \(N\),并支持以下功能:
- 给定(可能是负)整数 \(|x|, |y| \leqslant n\),将 \(x b^y\)加到 \(N\)。
- \(N \geqslant 0\)时,给定\(k\),打印\(N\)的第\(k\)位数字(指以\(b\)为基底意义下的)。
- 检查\(N\)是正值、负值还是等于\(0\)。
操作 \(O(\log n)\)均摊时间复杂度和 \(O(q)\)内存。并且只需要map进行实现,相比于线段树等数据结构维护非常的好写。
例题及实现 : [NOI2017] 整数
题意简述 : 一个整数\(x\),进行\(n\)次操作,分为两种:
将 \(x\) 加上整数 \(a\cdot 2^b\),其中 \(a\) 为一个整数,\(b\) 为一个非负整数
询问 \(x\) 在用二进制表示时,位权为 \(2^k\) 的位的值(即这一位上的 \(1\) 代表 \(2^k\))
保证在任何时候,\(x\geqslant 0\)。
- 对于所有测试点,满足 \(|a| \leqslant 10^9\);
- 对于所有测试点,满足 \(0 \leqslant b, k \leqslant 30n\);
- 对于所有测试点,满足 \(n \leqslant 1000000\)
这里我们的基底为\(2^{30}\),感性理解一下:把\(x\)的二进制表示分为若干段,每一段长是\(30\)位,这样每次我们只需要改动最多两段,分别对这两段将原数字位运算为相应位后直接加到数中,多于\(2 ^ {30}\)的进行进位操作。
发现其实很像一个\(2^{30}\)进位制,这也是以\(b\)为基底的真正含义
关于均摊时间复杂度
其实我不是很能证明,但是再次感性理解,就是假设一些段内的数为\([2^{30} - 1,2^{30} - 1,2^{30} - 1,2^{30} - 1...]\) 即对应二进制内全为\(1\)。
显然加一次,他就会往后进很多位花大量时间,虽然这一次花了很多时间,但是呢,需要进位的次数其实是很少的,而不需要进位的时候,直接加又很快,这样下来我们的均摊时间就不是那么慢了。
- 具体证明看这里
代码
先咕,急的看参考资料。
习题
参考资料
如果英语还不错,可以直接看原CF博客:
Big integers with negative digits: The Trygub numbers
CF原作者的[NOI2017] 整数提交记录
trick : Trygub num的更多相关文章
- POJ 3207 Ikki's Story IV - Panda's Trick
Ikki's Story IV - Panda's Trick Time Limit: 1000MS Memory Limit: 131072K Total Submissions: 7296 ...
- 缩点【洛谷P2921】 [USACO08DEC]在农场万圣节Trick or Treat on the Farm
[洛谷P2921] [USACO08DEC]在农场万圣节Trick or Treat on the Farm 题目描述 每年,在威斯康星州,奶牛们都会穿上衣服,收集农夫约翰在N(1<=N< ...
- P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm(Tarjan+记忆化)
P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm 题意翻译 题目描述 每年,在威斯康星州,奶牛们都会穿上衣服,收集农夫约翰在N(1<=N< ...
- luogu题解P2486[SDOI2011]染色--树链剖分+trick
题目链接 https://www.luogu.org/problemnew/show/P2486 分析 看上去又是一道强行把序列上问题搬运到树上的裸题,然而分析之后发现并不然... 首先我们考虑如何在 ...
- 一道返回num值的小题目
题目描述: 实现fizzBuzz函数,参数num与返回值的关系如下: .如果num能同时被3和5整除,返回字符串fizzbuzz .如果num能被3整除,返回字符串fizz .如果num能被5整除,返 ...
- 线程安全性:num++操作为什么也会出问题?
线程的安全性可能是非常复杂的,在没有充足同步的情况下,由于多个线程中的操作执行顺序是不可预测的,甚至会产生奇怪的结果(非预期的).下面的Tools工具类的plus方法会使计数加一,为了方便,这里的nu ...
- EEG preprocessing - A Trick Before Doing ICA
EEGLab maillist My ICs don't have high power in low frequency is b/c I do a small trick here. before ...
- Trick蠕虫病毒来袭!幕后主使竟是一名高中生“黑客”!
黑客一直是美国电影中的重要元素,很多经典大片中都有黑客的身影,如战争游戏.黑客帝国等.电影中黑客总是神通广大.行侠仗义,<战争游戏>中的年轻黑客大卫•莱特曼利用黑客技术避免引爆核武器,&l ...
- 多位数每一位个系数:个位num%10;十位num/10%10.......
请输出满足这样条件的五位数. 个位=万位 十位=千位 个位+十位+千位+万位=百位 思路: 1.定义一个要操作的五位数变量num 2.求出每一位个系数 个:num%10 十:num/10%10 百:n ...
- oracle TBL$OR$IDX$PART$NUM BUG案例处理过程
通过AWR报告发现数据库cpu告警的问题,定位产生问题的sql语句 首先查看SQL的执行计划 ) FROM cmds.psn_cntr_holder a ,cmds.pol_attrib c ,cmd ...
随机推荐
- CSS绘制虚线的方案
一.实现效果 二.代码实现 <div class="line"></div> .line { width: 1px; /* 虚线宽度 */ backgrou ...
- 2022-12-24:给定一个字符串s,其中都是英文小写字母, 如果s中的子串含有的每种字符都是偶数个, 那么这样的子串就是达标子串,子串要求是连续串。 返回s中达标子串的最大长度。 1 <= s的长
2022-12-24:给定一个字符串s,其中都是英文小写字母, 如果s中的子串含有的每种字符都是偶数个, 那么这样的子串就是达标子串,子串要求是连续串. 返回s中达标子串的最大长度. 1 <= ...
- 2022-07-31:给出一个有n个点,m条有向边的图, 你可以施展魔法,把有向边,变成无向边, 比如A到B的有向边,权重为7。施展魔法之后,A和B通过该边到达彼此的代价都是7。 求,允许施展一次魔法
2022-07-31:给出一个有n个点,m条有向边的图, 你可以施展魔法,把有向边,变成无向边, 比如A到B的有向边,权重为7.施展魔法之后,A和B通过该边到达彼此的代价都是7. 求,允许施展一次魔法 ...
- only仅显示一些字段
only仅显示一些字段 仅显示nickname,age两列的数据 Student.objects.all().only('nickname','age')
- Windows服务程序管理器 - 开源研究系列文章
这些天弄了一个Windows服务程序管理器,主要是对需要的Windows服务程序进行管理.这个也能够将自己开发的服务程序注册到操作系统里去运行. 1. 项目目录: 目录见下图,对代码进行 ...
- Velocity 不用愁!Velocity 系统的前端工程化之路
Velocity是一个基于Java的Web页面模版引擎.十多年前,Velocity将Java代码从Web页面中分离出来,使得开发者能够并行网页开发和Java开发.随着十年前后端分离的浪潮涌动,回首再面 ...
- Ubuntu22.04 安装单机版kubernetes
前言 上期讲到要实现.net 6框架下的EF Core操作数据库基本增删改查,没有及时兑现.没有兑现的原因就是因为安装kubernetes.安装kubernetes的过程是灾难性的,也是十分顺利的.灾 ...
- 1.1. Java简介与安装
Java简介 Java是一种广泛使用的计算机编程语言,由James Gosling和他的团队在Sun Microsystems公司开发,于1995年首次发布.Java的设计理念是"一次编写, ...
- 为teamcity的代码语法检查工具pyflakes增加支持python2和python3
TeamCity和pyflakes TeamCity是一款由JetBrains公司开发的持续集成和部署工具,它提供了丰富的功能来帮助团队协作进行软件开发.其中包括代码检查.自动化构建.测试运行.版本控 ...
- 基于ggplot2的解剖图和组织模块可视化
摘要 将数据显示到解剖结构上,是一种可以快速观察组织相关信息的便捷技术.然而,绘制组织是一项复杂的任务(a complex task),需要解剖学和艺术方面的专业知识.虽然已经存在可用于在解剖图上显示 ...