树状数组 一、长什么样? 假设有一数组a,数组b为a的前缀和数组,即b[i] = a[i] + a[i 1] + ... + a[1],树状数组c为a的(部分)前缀和数组,即c[i] = a[i] + a[i 1] + ... + a[i+1 lowbit(i)],也即c[i]为lowbit(i)个 ...
分类:
编程语言 时间:
2020-02-14 22:28:27
阅读次数:
95
树状数组不难理解,学的还算轻松,它的核心就是一个lowbit的运用,学之前还特地把位运算重新学了一遍。 //位运算符:& | ^ ~ << >> int a1=60,b1=13; //在二进制中, //a=00111100 //b=00001101 int c1=a1&b1;//对应每一位做与运算, ...
分类:
编程语言 时间:
2020-02-14 22:13:53
阅读次数:
87
这道题用树状数组做比较好,虽然树状数组能做的线段树也可以做到,但是树状数组更简洁方便,易操作 原理便是第x个数的二进制数最后一个“1”,决定tree的结点的长度 比如: sum[3]=tree[3]+tree[2]; sum[4]=tree[4]; sum[5]=tree[5]+tree[4]; 分 ...
分类:
其他好文 时间:
2020-02-12 13:15:00
阅读次数:
42
话说主席树还没写就先写这一篇了$qwq$ 回顾一下主席树的实现过程:类似查分思想,将线段树的每次修改看做函数式以支持可持久化。因为这样的线段树是可减的。 那么我们维护信息的时候,就要维护每一次新形成的信息。但是我们可以根据前一个信息的基础上进行改动,而不必要去再建一棵树。 所以总而言之,是前缀和的思 ...
分类:
编程语言 时间:
2020-02-11 11:20:46
阅读次数:
96
Color the ball HDU - 1556 N个气球排成一排,从左到右依次编号为1,2,3....N.每次给定2个整数a b(a <= b),lele便为骑上他的“小飞鸽"牌电动车从气球a开始到气球b依次给每个气球涂一次颜色。但是N次以后lele已经忘记了第I个气球已经涂过几次颜色了,你能帮 ...
分类:
编程语言 时间:
2020-02-10 22:29:36
阅读次数:
98
/* 虽然题目没说,但是读入有以下特点 由于,输入是按照按照y递增,如果y相同则x递增的顺序给出的 所以,可以利用入读的时间进行降为处理 */ 于是我们就得到了一个一维的树状数组解法啦 值得一提:坐标从0~32000,而树状数组是从1开始的 于是,我们对所有下标+1,数组开到32002就可以啦! 1 ...
分类:
编程语言 时间:
2020-02-10 19:41:13
阅读次数:
55
K Integers 参考博客:https://blog.csdn.net/Q755100802/article/details/103664555 【题意】 给定一个1到n的排列,可以交换相邻的两个元素。 现在定义一个函数f(x),表示在原排列中,通过交换操作,形成一个1,2,3....x的排列的 ...
分类:
编程语言 时间:
2020-02-10 11:39:21
阅读次数:
67
给出0~n-1的一个排列,可以整体移动,求逆序对最小值 把数字num[i]的加入,等价于树状数组的第n-num[i]位加1 因为num[i]是第 (n-1)-num[i]+1=n-num[i]大的数字,产生逆序对,只可能在其之前已经插入了数字,此时直接区间查询即可 1 #include <set> ...
分类:
编程语言 时间:
2020-02-10 09:33:02
阅读次数:
50
#include<iostream> #include<algorithm> #include<cstring> #include<cstdio> using namespace std; typedef long long ll; const int N=1e5+10; int a[N]; int ...
分类:
编程语言 时间:
2020-02-09 20:45:45
阅读次数:
68
单点修改+区间查询=树状数组 空间复杂度O(n) 时间复杂度O(mlogn) 1 #include <set> 2 #include <map> 3 #include <cmath> 4 #include <queue> 5 #include <vector> 6 #include <cstdio> ...
分类:
编程语言 时间:
2020-02-09 20:34:15
阅读次数:
79