树状数组
文章平均质量分 54
1
zzqwtc
blog dot zzqwtc dot com
展开
-
AcWing244. 谜一样的牛 (树状数组+二分)
AcWing 244. 谜一样的牛(二分)思路初始化所有数为1 代表没有用过从后往前计算 找到还未用过的前k小的数是几 使得sum(x) == k成立的最小x即为答案然后将这个数置为0 表示已经用过有n头奶牛,已知它们的身高为 1~n 且各不相同,但不知道每头奶牛的具体身高。现在这n头奶牛站成一列,已知第i头牛前面有AiA_{i}Ai头牛比它低,求每头奶牛的身高。输入格式第1行:输入整数n。第2…n行:每行输入一个整数AiA_{i}Ai,第i行表示第i头牛前面有AiA_{i}Ai头原创 2021-01-25 00:14:37 · 2616 阅读 · 0 评论 -
AcWing 243. 一个简单的整数问题2(树状数组实现区间修改+区间查询)
AcWing243. 一个简单的整数问题2(树状数组实现区间修改+区间查询)a1+a2+a3+a…axa_{1}+a_{2}+a_{3}+a\dots a_{x}a1+a2+a3+a…ax ====== ∑i=1x∑j=1ibj\sum^{x}_{i = 1}\sum^{i}_{j = 1}b_{j}∑i=1x∑j=1ibj给定一个长度为N的数列A,以及M条指令,每条指令可能是以下两种之一:1、“C l r d”,表示把 A[l],A[l+1],…,A[r] 都加上 d。2、“Q l原创 2021-01-25 00:13:55 · 2332 阅读 · 0 评论 -
AcWing242. 一个简单的整数问题 (树状数组+差分)
AcWing242. 一个简单的整数问题()给定长度为N的数列A,然后输入M行操作指令。第一类指令形如“C l r d”,表示把数列中第l~r个数都加d。第二类指令形如“Q X”,表示询问数列中第x个数的值。对于每个询问,输出一个整数表示答案。输入格式第一行包含两个整数N和M。第二行包含N个整数A[i]。接下来M行表示M条指令,每条指令的格式如题目描述所示。输出格式对于每个询问,输出一个整数表示答案。每个答案占一行。数据范围1≤N,M≤1051≤N,M≤10_{5}1≤N,M≤10原创 2021-01-25 00:12:18 · 2356 阅读 · 0 评论 -
AcWing241. 楼兰图腾 (树状数组)
AcWing241. 楼兰图腾在完成了分配任务之后,西部314来到了楼兰古城的西部。相传很久以前这片土地上(比楼兰古城还早)生活着两个部落,一个部落崇拜尖刀(‘V’),一个部落崇拜铁锹(‘∧’),他们分别用V和∧的形状来代表各自部落的图腾。西部314在楼兰古城的下面发现了一幅巨大的壁画,壁画上被标记出了N个点,经测量发现这N个点的水平位置和竖直位置是两两不同的。西部314认为这幅壁画所包含的信息与这N个点的相对位置有关,因此不妨设坐标分别为(1,y1),(2,y2),…,(n,yn)(1,y_{1}原创 2021-01-25 00:11:29 · 2387 阅读 · 1 评论 -
树状数组原理
功能:①快速求前缀和O(logn)O(logn)O(logn)②修改某一个数O(logn)O(logn)O(logn)操作:①:建树void add(int x, int c) { //树状数组的插入操作 for (int i = x;i <= n;i += lowbit(i))tr[i] += c;}②:区间查询:1 ~ x 前缀和for(int i = x;i <= n;i += lowbit(i))res += c;③:单点修改:for(int i = x;i;原创 2021-01-25 00:10:54 · 2257 阅读 · 0 评论