0开始的数据结构
ddgo
给我高高飞起来啊!(ACM退役,转JAVA后端了)
展开
-
各类数据结构(持续更新)
update : 2021/6/8文章目录基础数据结构并查集程序自动分析解释模板更多例题树状数组楼兰图腾解释模板更多例题线段树区间修改(加 & 乘)解释模板更多例题区间染色解释模板(懒标记法)模板(倒序插入维护区间染色)更多例题可持久化线段树(主席树)【模板】可持久化线段树1(可持久化数组)解释模板【模板】可持久化线段树2(主席树)解释模板更多例题基础数据结构并查集程序自动分析解释把相同的直接加入到一个集合里面,然后再之后判断他们是否真正相同. 注意离散化。模板#include<原创 2021-06-08 11:00:00 · 391 阅读 · 0 评论 -
Minimum Inversion Number(HDU1394)(线段树求逆序对+思维)
题目地址配套地址维护逆序对,主要是第一次求完解之后,每次考虑将一个数放到最后数量的变化。变化为 (n - a(i)) - (a(i) - 1)a(i) >= 1。可以树状数组和归并排序#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);#include<bits/stdc++.h>using namespace std;const int N = 2e5 + 10;const int mod =原创 2021-10-21 20:57:57 · 110 阅读 · 0 评论 -
敌兵布阵(HDU1166)(区间求和+单点修改)
题目地址配套地址写了一个区间修改的。[pos,pos]修改的。可以去掉add#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);#include<bits/stdc++.h>using namespace std;const int N = 2e5 + 10;const int mod = 998244353;//#define int long longtypedef long long ll;#d原创 2021-10-20 23:57:53 · 94 阅读 · 0 评论 -
I Hate It (HDU1754)(区间最值+单点修改)
题目地址配套地址维护mx,编写push_up#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);#include<bits/stdc++.h>using namespace std;const int N = 2e5 + 10;const int mod = 998244353;//#define int long longtypedef long long ll;#define endl '\n'原创 2021-10-20 22:36:30 · 84 阅读 · 0 评论 -
Just a Hook(HDU1689)(线段树区间赋值)
题目地址配套地址给维护区间值懒标记需有上传维护和下放#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);#include<bits/stdc++.h>using namespace std;const int N = 1e5 + 10;const int mod = 998244353;//#define int long longtypedef long long ll;#define endl原创 2021-10-20 22:10:48 · 83 阅读 · 0 评论 -
势能线段树模板题二
题目地址配套地址#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);#include<bits/stdc++.h>using namespace std;const int N = 2e5 + 10;const int mod = 998244353;//#define int long longtypedef long long ll;int a[N];#define l(x) t[x].l#原创 2021-09-18 14:55:49 · 191 阅读 · 0 评论 -
谜一样的牛(acwing)(树状数组+二分)
题目地址配套地址/* 从后往前,每个位置(i)的值应该为, 将i后面所有确定好的数插入到数列中,第(A[i]+1)个空位对应的下标。 可以用二分加树状数组。 树状数组处理上述语句的前半段,二分处理后半段,去快速查找那个位置。*/#include<bits/stdc++.h>using namespace std;const int N = 1e5 + 10;int c[N],n,a[N],ans[N];bool vis[N];#define原创 2021-06-30 22:07:30 · 89 阅读 · 0 评论 -
一个简单的整数问题2(acwing)(数状数组)
题目地址配套地址区间修改还是以维护差分。区间查询就需要再推一个公式化简。假设维护的差分序列为b[].查询一段区间[l,r],可以用连段的差值相减,即求一段区间[l,r] = [1,r] - [1,l-1].有[1,p]的值为 ∑i=1p∑j=1ib[j]\sum_{i=1}^{p}\sum_{j=1}^{i}b[j]∑i=1p∑j=1ib[j] , p 为l-1或者r再次化简,得到∑i=1p(p−i+1)b[i]\sum_{i=1}^{p}(p-i+1)b[i]∑i=1p(p−i+1)原创 2021-06-30 20:56:52 · 124 阅读 · 0 评论 -
一个简单的整数问题(acwing)(树状数组/线段树)
题目地址配套地址/* 区间修改,单点查询。 假设还是维护的是原数组,区间修改时,需要对每一个数进行需改,需要枚举。 那可以将区间修改变成点修改降低时间复杂度,即维护差分。 单点查询,因为维护的是差分序列,则需要将该点及前面点的总和。*/#include<bits/stdc++.h>using namespace std;#define int long longconst int N = 1e5 + 10;int n,m;int a[N],原创 2021-06-30 12:08:10 · 102 阅读 · 0 评论 -
Stone Games (nowcoder)(主席树)
题目地址配套地址#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);#include<bits/stdc++.h>//#define int long longusing namespace std;typedef pair<int,int> pii;typedef long long ll;const int INF = 0x3f3f3f3f;const double eps = 1e-原创 2021-06-26 21:33:53 · 133 阅读 · 0 评论 -
关押罪犯(acwing)(扩展域并查集 / 二分图)
题目地址配套地址/* 扩展域并查集 编号i表示与i同一间监狱,i+n表示与i不同监狱。 先按c从大到小排序,如果到了某次,当前两个人不得不在同一监狱,则输出。 #include<bits/stdc++.h>using namespace std;const int N = 1e5 + 10;int fa[N];struct edge{ int a,b,c; bool operator < (const edge&T)原创 2021-06-26 15:06:57 · 176 阅读 · 0 评论 -
数颜色 (洛谷)(可持久化线段树(x))
题目地址配套地址被卡掉了。权值线段树维护,对于2操作,起始就是交换元素后,更新rt[x]和rt[x+1]主席树#include<bits/stdc++.h>using namespace std;const int N = 3e5 + 10,M = 1e6 + 10;int rt[N],len[N];int a[N];#define ls(x) t[x].ls#define rs(x) t[x].rs#define sum(x) t[x].sumstruct LS原创 2021-06-08 13:02:01 · 131 阅读 · 0 评论 -
高级打字机(洛谷)(可持久化线段树)
题目地址配套地址可持久化数组维护,需要记录每一个版本插入的长度,undo操作相当于把距离当前x个版本的根节点给它。#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);#include<bits/stdc++.h>#define int long longusing namespace std;const int N = 1e5 + 10;int rt[N],len[N];char op[N];#d原创 2021-06-08 10:43:29 · 104 阅读 · 0 评论 -
HH的项链 (洛谷p1972)(树状数组)
题目地址配套地址求区间不同数的个数。用离线处理,按右端点排序。出现相同的个数,那么靠右端点的才有权值,前面的权值都为0.可以直接主席树搞(TLE两点).代码#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);#include<bits/stdc++.h>#define int long longusing namespace std;const int N = 1e6 + 10;int n,m;i原创 2021-06-07 23:08:41 · 110 阅读 · 0 评论 -
KUR-Couriers (洛谷P3567 )(可持久化线段树)
题目地址配套地址 待发解释主席树维护前缀信息(区间出现数的个数),通过两颗树相减,可以得到区间的信息。询问的时候严格大于区间长度则大于(r - l + 1)/ 2,如果左边出现点的个数大于这个,那么可能出现在左边如果右边出现点的个数大于这个,那么可能出现在右边否则为0,没有代码#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);#include<bits/stdc++.h>using names原创 2021-06-04 22:37:34 · 157 阅读 · 0 评论