![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
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 · 219 阅读 · 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 · 303 阅读 · 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 · 275 阅读 · 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 · 284 阅读 · 0 评论 -
ac自动机(求每个单词在单词所组成的论文中出现的次数)
思路:其实就是求每个单词的前缀中有多少后缀出现过某个单词,如果正向通过单词来枚举每个后缀,复杂度过高,那么我们反着枚举,然后惊奇的发现,这不就是next数组吗!那么就是把原题转化成了一个dag图,只需要把某个后继点的值累加到每个前缀就可以了,最后在插入的时候记录下每个单词的的位置,由于是dag图,我们将bfs的序列反着遍历,把f数组的当前值累加到前驱即可,这样就等价于把他的值给了所有前驱节点。最后查询f[位置]即可。#include<bits/stdc++.h>using namespace原创 2020-11-28 23:46:35 · 300 阅读 · 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 · 258 阅读 · 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 · 200 阅读 · 0 评论