主要讲一下状数组的建立和逆序对的求解方法 树状数组: 修改和查询的复杂度均为$O(\log n)$相比线段树的系数要少很多。 采用了二进制的方法建树,仅有左儿子而无右儿子. 建树过程: void update(int x,int y){//给x位置加上y while(x<=n){ d[x]+=y;x ...
分类:
编程语言 时间:
2020-07-15 22:44:24
阅读次数:
64
题目链接:http://poj.org/problem?id=2482 给出每个点框定的区域,求区域叠加的最大值,可以通过如下算法: 将每个可行点都标记,记录这些点上的权值,维护一个叶结点是一个权值点的线段树,更新的时候注意,由于所有的点都是可行点,所以右边界要在最后删除,遇到同样的x坐标的,优先叠 ...
分类:
编程语言 时间:
2020-07-15 15:23:49
阅读次数:
68
2017种树 题目描述 2017共有N棵树从0到N-1标号。现要把这些树种在一条直线上,第i棵树的种植位置X[i]如下确定: X[0] = X[0] MOD L; X[i] = (X[i-1]*A+B) MOD L。 每棵树种植的费用,是所有标号比它小的树与它的距离之和。2017请你计算各棵树的费用 ...
分类:
其他好文 时间:
2020-07-14 19:58:09
阅读次数:
60
题目链接:https://codeforces.com/problemset/problem/1114/F 题目大意:给你n个数,q次操作,类型1,将区间[l,r]中每个数乘以x,类型2,询问$\varphi (\prod_{i=l}^{r}a_i)$。其中初始的n个数每个小于等于300,x<=30 ...
分类:
其他好文 时间:
2020-07-12 19:09:23
阅读次数:
52
https://ac.nowcoder.com/acm/contest/6046/C 二维线段树+区间异或+区间求和 1 #include <iostream> 2 #include <algorithm> 3 #include <cstring> 4 #include <cstdio> 5 usi ...
分类:
其他好文 时间:
2020-07-12 12:31:15
阅读次数:
68
这道题是一道树状数组的模板题,主要考察树状数组的单点修改和区间求和的两种基本操作,只要写好对应的函数,按照读入的内容进行操作即可。首先写好lowbit、update、sum函数。因为之前已经写过了这些函数的写法,这里不再陈述。 int lowbit(int x){ return x&(-x); } ...
分类:
编程语言 时间:
2020-07-12 11:58:25
阅读次数:
57
线段树是一种二叉树,也就是对于一个线段,我们会用一个二叉树来表示。
可以进行一些区间的修改和查询。 ...
分类:
其他好文 时间:
2020-07-11 19:21:50
阅读次数:
41
https://www.luogu.com.cn/problem/P3372 题目描述 如题,已知一个数列,你需要进行下面两种操作: 将某区间每一个数加上 kk。 求出某区间每一个数的和。 输入格式 第一行包含两个整数 n, mn,m,分别表示该数列数字的个数和操作的总个数。 第二行包含 nn 个用 ...
分类:
其他好文 时间:
2020-07-11 19:19:17
阅读次数:
92
树状数组能做的线段树都可以,但是有的时候为了代码简单,能写树状数组就不写线段树。 树状数组是一种类似线段树的数据结构,只不过树状数组上的操作比较简单,最简单的就是单点修改和区间查询 树状数组是按照数的二进制形式进行存储数据,s[1]存储的是a[1] ,s[2]存储的是a[1]+a[2] ,s[3]存 ...
分类:
编程语言 时间:
2020-07-11 11:14:57
阅读次数:
81
刚开始想出了一个分治做法,但是比较麻烦,需要分 4 中情况讨论. 后来偷看了一眼标签发现是线段树,然后就想出了这个线段树做法. 考虑序列以 $r$ 为右端点的答案,有 $\sum_{l=1}^{i} max(l,i)-min(l,i)=i-l$. 其中这个条件可以写成 $max(l,i)-min(l ...
分类:
其他好文 时间:
2020-07-11 09:21:57
阅读次数:
70