题目描述 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…
题目大意:让你维护一个数x(x位数<=3*1e7),要支持加/减a*2^b,以及查询x的第i位在二进制下是0还是1 作为一道noi的题,非常考验写代码综合能力,敲+调+借鉴神犇的代码 3个多小时才过... 思路并不难,题目里b<=30n暗示压位,每次压30位可过 先分析一下加法,加a*2^b相当于在第b-1位加a,如果进位了(即>),那就在下一位+1,如果下一位还进位了,那就再下一位+1...... 暴力进位显然不可取,那么用线段树维护它,维护连续的几大位之内是否全都是1 a<=1…
题目:https://loj.ac/problem/2302 压30位,a最多落在两个位置上,拆成两次操作. 该位置加了 a 之后,如果要进位或者借位,查询一下连续一段 0 / 1 ,修改掉,再在含有 1 / 0 的那个位置上 -1 或者 +1 . 注意是在那个位置上 -1 或者 +1 而不是 -lowbit 或者 +lowbit . 询问都是 <=30n ,所以只维护 30n 的范围即可.注意线段树压 30 位,开 n 个位置恰好是 0*n ~ 29*n,所以开 n+1 个位置. 线段树只需维…
[题目]#2302. 「NOI2017」整数 [题意]有一个整数x,一开始为0.n次操作,加上a*2^b,或询问2^k位是0或1.\(n \leq 10^6,|a| \leq 10^9,0 \leq b,k \leq 30n\). [算法]压位+线段树 [参考]GXZlegend 先考虑以每一位为下标开线段树,将一次加减法拆成log a次一个位的加减法. 考虑对位x加法,如果x为0直接加,如果x为1则向高位找到第一个0加上1,然后之间的区间全部置为0. 减法同理,如果x为1直接减,否则向高位找到…
传送门 直接把修改的数拆成logloglog个二进制位一个一个修改是会TLETLETLE的. 因此我们把303030个二进制位压成一位储存在线段树里面. 然后维护区间中最靠左二进制位不为0/1的下标. 手动模拟一波进/退位就行了. 代码: #include<bits/stdc++.h> #define lc (p<<1) #define rc (p<<1|1) #define mid (T[p].l+T[p].r>>1) using namespace st…
用线段树来模拟加减法过程,维护连续一段中是否全为0/1. 因为数字很大,我们60位压一位来处理. #include<iostream> #include<cstring> #include<cstdlib> #include<cmath> #include<cstdio> #include<algorithm> #define maxn 505050 #define base 60 #define ll long long using…
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次方的数组表示这个数,只有加…
首先把每32位压成一个unsigned int(当然只要压起来能过就行).如果不考虑进/退位的话,每次只要将加/减上去的数拆成两部分直接单点修改就好了.那么考虑如何维护进/退位.可以发现进位的过程其实就是将一段连续的inf改为0,并把之后一位+1,也就是说只要找到某一位之后第一个不是inf的位就好了.我们用线段树维护这个东西,记录一下某个节点表示的区间是否全为inf.查询时先从叶子节点往上爬,直到当前节点代表的区间中在该叶子节点右边的位不全为inf时停止,之后再往下找最左的非inf位.退位类似.…
链接:https://ac.nowcoder.com/acm/contest/160/D 来源:牛客网 整数序列 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 给出一个长度为n的整数序列a1,a2,...,an,进行m次操作,操作分为两类. 操作1:给出l,r,v,将al,al+1,...,ar分别加上v: 操作2:给出l,r,询问\sum\limits_{i=l}^{r}sin(a_…
题目背景 在人类智慧的山巅,有着一台字长为1048576位(此数字与解题无关)的超级计算机,著名理论计算机科 学家P博士正用它进行各种研究.不幸的是,这天台风切断了电力系统,超级计算机 无法工作,而 P 博士明天就要交实验结果了,只好求助于学过OI的你. . . . . . 题目描述 P 博士将他的计算任务抽象为对一个整数的操作. 具体来说,有一个整数xx,一开始为00. 接下来有nn个操作,每个操作都是以下两种类型中的一种: 1 a b:将x加上整数\(a\cdot 2^b\),其中a为一个整…