数据结构
文章平均质量分 52
Lascym
这个作者很懒,什么都没留下…
展开
-
Codeforces Round #797 (Div. 3)(A-G)题解
题意水题,一个数,让你分成三个数a,b,c,关系大小为b>a>c,要严格大于,而且要使b的取值尽可能地大题解分三种情况讨论即可B. Array Decrements题意给你a,b两个序列,以及一种操作:选中a序列中的一个数,让a序列中除了这个数以外的数全部减一,问最终能否能变成b序列题解维护除bi=0以外,所有ai与bi的差值,如果bi>ai一定不可以,差值不相等也不可以,同时维护bi为0的ai的最大值,如果出现过bi等于0,且ai的最大值大于其他bi不等于其他差值,也是不可以,除此以外都原创 2022-06-10 23:58:18 · 173 阅读 · 0 评论 -
求第K小数(树状数组+二分)2021icpc河南省省赛赛
补题做到的,没有注意提交人数,看到题就有一点思路就开始敲了,可以转化为经典的主席树问题,区间查询第k小,但是树状数组代码比较简短;题目大意给你一个数组,给了一个k,让你答出,每个数左边第k个比他大的数是多少。题解先把所有的数据用结构体或者pair记录原下标,按照权值从大到小排序,转化为离线操作。从大到小插入数据,每组数据就相当于是一个询问,这样可以保证插入这个数据之前的所有数据都比他大。所以可以用树状数组去记录权值,也就是他左边出现的数的数量,因为是从大到小已经排过序了,出现过的数是一定要大于原创 2022-05-25 23:19:01 · 165 阅读 · 0 评论 -
归并排序求逆序对(CF1676-H2)
因为今天在补div4的H2时候,发现自己已经忘记了求逆序对的板子,所以就重新学了一遍归并排序主要思想归并排序的主要思想是分治,首先把一个序列分成一半,这样一半一半的分,直到分到只剩下两个元素,把这两个底层的元素归并之后,就是一段有序的子序列,继续这样往上递归,每次都是有两个有序的序列,再合并起来,合成新的有序序列求逆序对求逆序对也是利用归并排序的思想,因为归并排序过程中需要用双指针去在两个有序序列去取最小值,我们假设l–mid是序列a,mid–r是序列b,当最小值取到b序列的元素是,此时a数组里的指原创 2022-05-17 00:11:14 · 162 阅读 · 0 评论 -
HH的项链(莫队/树状数组/主席树)
题目描述HH 有一串由各种漂亮的贝壳组成的项链。HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义。HH 不断地收集新的贝壳,因此,他的项链变得越来越长。有一天,他突然提出了一个问题:某一段贝壳中,包含了多少种不同的贝壳?这个问题很难回答…… 因为项链实在是太长了。于是,他只好求助睿智的你,来解决这个问题。输入格式一行一个正整数 n,表示项链长度。第二行 n 个正整数 ai,表示项链中第 i 个贝壳的种类。第三行一个整数 m,表示 H 询问的个数。接原创 2022-05-14 00:28:37 · 532 阅读 · 0 评论 -
Assign the task HDU - 3974(DFS序+线段树)
DFS序DFS序是根据DFS遍历树的结点的入栈出栈顺序来给节点赋值的,如下图,黑色的是节点本身的编号,红色的是DFS序以后的数组,数组两个相同的数字之前的标号的的节点,是这个节点的子树,比如红色的2节点,中间有1,3,4三个标号,代表1,3,4是2的子树,将树形结构变成线性结构后,我们就可以用树状数组或者线段树进行操作了题面有一家公司有 N 名员工(从 1 到 N 编号),公司的每个员工都有一个直属上司(全公司的领导除外)。如果你是某人的直属上司,那人就是你的下属,他所有的下属也是你的下属。如果你不原创 2022-05-09 23:48:34 · 107 阅读 · 0 评论 -
ZOJ16109线段树区间操作(区间染色)
题面Painting some colored segments on a line, some previously painted segments may be covered by some the subsequent ones.Your task is counting the segments of different colors you can see at last.InputThe first line of each data set contains exactly one原创 2022-05-04 23:34:19 · 275 阅读 · 0 评论 -
分块入门思想
主要是对于分块思想的一些个人理解主要思想最主要的思想是把一个长度为n数列,均等的分成根号n个块,在对区间进行圣体操作的时候,遇到完整的块,就直接对整个块进行操作,需要用到线段树lazy懒惰标记的区间处理的办法,对于两端不完整的块,直接去暴力遍历它。对于数列分块的分块处理主要是有两种方法每一种是函数法每一种是数组法我自己之前一直用的是函数法,因为函数比较直观,但是直到某天在写一道牵涉分块的题目的时候,被卡常了,隔壁队伍的好兄弟告诉我,函数法常数很大,最好要用数组。分块函数第一种int get(原创 2022-04-20 23:31:44 · 111 阅读 · 0 评论 -
第k小数/可持久化权值线段树的一些理解
int insert(int p, int l, int r, int x){ int q = ++idx; //每次修改操作都会生成一个新的根节点 tr[q] = tr[p]; //将原来的节点复制下来 if (l == r) { tr[q].cnt++; return q; } int mid = l + r >> 1; if (x <= mid) tr[q].l = insert原创 2022-04-15 09:47:30 · 407 阅读 · 0 评论