首页
Python
Java
IOS
Andorid
NodeJS
JavaScript
HTML5
P3822 [NOI2017] 整数
2024-08-31
【洛谷3822】[NOI2017] 整数(线段树压位)
题目: 洛谷 3822 分析: 直接按题意模拟,完了. 将每次加 / 减拆成不超过 \(32\) 个对单独一位的加 / 减. 考虑给一个二进制位(下称「当前位」)加 \(1\) 时,如果这一位本来就是 \(0\) ,那么直接变成 \(1\) .否则要考虑进位:向左(以后默认从右向左为低位至高位,与书写顺序相同)找到第一个为 \(0\) 的位 \(p\) ,将其变成 \(1\) ,并把从 \(p\) 到当前位中间所有的 \(1\) 变成 \(0\) . 减法是类似的.退位操作就是向左找到第一个 \
[bzoj4942] [洛谷P3822] [NOI2017] 整数
题目链接 https://www.luogu.org/problemnew/show/P3822 想法 这个啊,就是线段树哇 最初的想法是每位一个节点,然后进位.退位找这一位前面第一个0或第一个1,然后把中间一段修改了即可 但是每位一个节点太浪费了,会超时,故可以压位,30位一个节点 要找每个点前面第一个0或1的话,可以记录一下每个区间里是否全0或全1,不停地维护 反正基本思路就是这样,但是代码真心挺恶心的,调了一天呢!NOI题真是毒瘤! (初三一模前两天调这个代码,酸爽啊--qwq) 代码 #
P3822 [NOI2017]整数
传送门 shadowice大佬已经写的非常详细了我就不再写一遍了-- //minamoto #include<bits/stdc++.h> #define u unsigned int #define fp(i,a,b) for(register int i=a,I=b+1;i<I;++i) #define fd(i,a,b) for(register int i=a,I=b-1;i>I;--i) using namespace std; char buf[1<<21]
[NOI2017]整数
[NOI2017]整数 题目大意: \(n(n\le10^6)\)次操作维护一个长度为\(30n\)的二进制整数\(x\),支持以下两种操作: 将这个整数加上\(a\cdot2^b(|a|\le10^9,b\le30)\). 询问这个整数第\(k\)位的值. 题目保证任何时刻\(x\ge0\). 思路: 维护每一位的值,并在线段树上记录每个区间是否含有\(0\)或\(1\),以便发生进退位时快速查找到进退位结束的位置.区间修改,单点查询.时间复杂度\(\mathcal O(n\log(30n))
【BZOJ4942】[Noi2017]整数 线段树+DFS(卡过)
[BZOJ4942][Noi2017]整数 题目描述去uoj 题解:如果只有加法,那么直接暴力即可...(因为1的数量最多nlogn个) 先考虑加法,比较显然的做法就是将A二进制分解成log位,然后依次更新这log位,如果最高位依然有进位,那么找到最高位后面的第一个0,将中间的所有1变成0,那个0变成1.这个显然要用到线段树,但是复杂度是nlog2n的,肯定过不去. 于是我在考场上yy了一下,这log位是连续的,我们每次都要花费log的时间去修改一个岂不是很浪费?我们可以先在线段树上找到这段区间
[Bzoj4942][Noi2017]整数(线段树)
4942: [Noi2017]整数 Time Limit: 50 Sec Memory Limit: 512 MBSubmit: 363 Solved: 237[Submit][Status][Discuss] Description http://www.lydsy.com/JudgeOnline/upload/Noi2017D1.pdf Input Output Sample Input Sample Output HINT 分析: 如果维护一个3*10^7次方的数组表示这个数,只有加
NOI2017整数
NOI2017 整数 题意: 让你实现两个操作: 1 \(a\) \(b\):将\(x\)加上整数\(a \cdot 2 ^ b\),其中 \(a\)为一个整数,\(b\)为一个非负整数 2 \(k\):询问 \(x\)在用二进制表示时,位权为\(2 ^ k\)的位的值(即这一位上的\(1\)代表\(2 ^ k\)) 一百万次操作,$ |a| \leq 10^9,b,k\leq30n$. 题解: 线段树+压位,30位一位,没了 #include<cstdio> #include&l
【BZOJ4942】[NOI2017]整数(分块)
[BZOJ4942][NOI2017]整数(分块) 题面 BZOJ 洛谷 题解 暴力就是真正的暴力,直接手动模拟进位就好了. 此时复杂度是模拟的复杂度加上单次询问的\(O(1)\). 所以我们需要优化的是模拟的复杂度. 首先如果一位位单位加入,这个复杂度是均摊\(O(1)\)的.因为是均摊,所以我们不能支持撤销(即减法操作),所以加法减法必须分开处理. 对于位运算加法我们考虑压位(或者说分块也是一样的啦) 那么加法就很容易处理了,只需要压位之后找到对应的块,然后直接暴力加上去就行了. 这里稍微注
【bzoj4942】[Noi2017]整数 压位+线段树
题目描述 P 博士将他的计算任务抽象为对一个整数的操作. 具体来说,有一个整数 $x$ ,一开始为0. 接下来有 $n$ 个操作,每个操作都是以下两种类型中的一种: 1 a b :将 $x$ 加上整数 $a⋅2^b$ ,其中 $a$ 为一个整数,$b$ 为一个非负整数 2 k :询问 $x$ 在用二进制表示时,位权为 $2^k$ 的位的值(即这一位上的 $1$ 代表 $2^k$ ) 保证在任何时候,$x≥0$. 输入 从标准输入读入数据. 输入的第一行包含四个正整数 $n,t_1,t_2,t_3
[BZOJ4942] [NOI2017]整数
题目背景 在人类智慧的山巅,有着一台字长为1048576位(此数字与解题无关)的超级计算机,著名理论计算机科 学家P博士正用它进行各种研究.不幸的是,这天台风切断了电力系统,超级计算机 无法工作,而 P 博士明天就要交实验结果了,只好求助于学过OI的你. . . . . . 题目描述 P 博士将他的计算任务抽象为对一个整数的操作. 具体来说,有一个整数xx,一开始为00. 接下来有nn个操作,每个操作都是以下两种类型中的一种: 1 a b:将x加上整数\(a\cdot 2^b\),其中a为一个整
BZOJ4942 & UOJ314:[NOI2017]整数——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=4942 http://uoj.ac/problem/314 https://www.luogu.org/problemnew/show/P3822 题面是markdown形式的所以我传不上…… UPD:18.5.11改成对参考代码的理解失误. 参考:http://www.cnblogs.com/RabbitHu/p/UOJ314.html仔细思考之后发现lazy标记可以不下传,因为区间修改都是改0
热门专题
错误 枚举 swich case
excel writer poi 如何设置单元格保护
oracle数据库有哪些版本
react native 输入框布局顶上来
python cv2 相似图片识别 封装
在aws上使用root用户登录
三星手机的airplay
openvpn server.conf在哪里
videojs.getcomponent打包影响使用
java上传视频获取视频大小
flask 参数校验
linux mysql 通过库frm和idb恢复数据库
db2 时间加1个小时
jquery iframe父子页面通信
html ocx事件
vue使用nodejs建立服务器申请数据做测试
android studio新项目重新下载gradle
shell脚本读取文件前3行
逻辑卷lvs命令详解
信息技术Python操作题金字塔