数据结构
goto_1600
我何来寂寞,哪有寂寞可言。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
权值线段树套传统线段树+懒标记持久化+动态开点
有 N 个位置,M 个操作。每个位置可以同时存储多个数。 操作有两种,每次操作: 如果是 1 a b c 的形式,表示在第 a 个位置到第 b 个位置,每个位置加入一个数 c。 如果是 2 a b c 的形式,表示询问从第 a 个位置到第 b 个位置,第 c 大的数是多少。 输入格式 第一行包含两个整数 N,M。 接下来 M 行,每行包含一条指令,形如 1 a b c 或 2 a b c。 输出格式 输出每个询问的结果,每个结果占一行。 数据范围 1≤N,M≤50000, 1≤a≤b≤N, 1 操原创 2020-12-14 11:42:15 · 285 阅读 · 0 评论 -
树套树板子
#include<iostream> #include<cstring> #include<stdlib.h> #include<time.h> using namespace std; const int N=50010; int n,m; int cnt; struct node{ int l; int r; int val; int key; int sz; }fhq[N*40]; struct nd{ int l; int r; i原创 2020-12-13 12:16:08 · 370 阅读 · 0 评论 -
fhqtreap 维护区间翻转
#include<bits/stdc++.h> using namespace std; struct node{ int l; int r; int val; int key; int sz; int lz; }fhq[100010]; int root; int cnt; void update(int now) { fhq[now].sz = 1+fhq[fhq[now].l].sz+fhq[fhq[now].r].sz; } int newnode(int val) {原创 2020-12-09 10:21:50 · 358 阅读 · 0 评论 -
普通平衡树 fhq yyds
#include<bits/stdc++.h> using namespace std; int cnt; int root; int x,y,z; struct node{ int l; int r; int val; int key; int sz; }fhq[100010]; int newnode(int x) { ++cnt; fhq[cnt].sz=1; fhq[cnt].key=rand(); fhq[cnt]原创 2020-12-07 21:53:46 · 405 阅读 · 0 评论 -
ac自动机(求每个单词在单词所组成的论文中出现的次数)
思路:其实就是求每个单词的前缀中有多少后缀出现过某个单词,如果正向通过单词来枚举每个后缀,复杂度过高,那么我们反着枚举,然后惊奇的发现,这不就是next数组吗!那么就是把原题转化成了一个dag图,只需要把某个后继点的值累加到每个前缀就可以了,最后在插入的时候记录下每个单词的的位置,由于是dag图,我们将bfs的序列反着遍历,把f数组的当前值累加到前驱即可,这样就等价于把他的值给了所有前驱节点。最后查询f[位置]即可。 #include<bits/stdc++.h> using namespace原创 2020-11-28 23:46:35 · 360 阅读 · 0 评论 -
(可持久化线段树)主席树
上面就是我的丑图hh,一般主席树开40倍空间就可以了,每次插入的时候只需要比较前一个版本和这一个版本就行了,然后每个版本是区间可减的,比如询问l到r之间的第k大,只需要处理r-(l-1)版本的数量即可。 #include<bits/stdc++.h> using namespace std; const int N=200010; struct node{ int l; int r; int sum; }tr[N*40]; int cnt; int a[N]; int root[N]; v原创 2020-11-06 12:24:25 · 318 阅读 · 0 评论 -
树
大致题意:让你求以每个点为中心,所有点到这个中心的距离和。 思路:看了大佬代码,先处理包含每个点的子树的个数,我们当且仅把1当作根结点,然后往下传。然后处理出所有点到1的距离和, res[u] += num[j]; res[u] += res[j];我们可以很好的证明出,u以后的子节点到u的距离无非就是多加了一条u->v的·边,所以就是多加了子树的大小。 然后接下来就是求别的点的答案了,可以从图发现,当中心从u变为v的时候 v的子树都不会走u到v这条边了,所以减去子树v的大小,然而上面的节点都会.原创 2020-08-29 15:34:32 · 257 阅读 · 0 评论
分享