进阶课
qq_45843001
这个作者很懒,什么都没留下…
展开
-
splay学习笔记
记录splay的区间操作之区间加法 #include<iostream> #include<algorithm> #include<cstring> #include<cstdio> using namespace std; typedef long long ll; const int N = 1e5+10,INF = 1e9; int w[N]; struct node{ int s[2],p,v; int size; ll add原创 2021-01-14 22:07:47 · 71 阅读 · 0 评论 -
权值线段树学习笔记
权值线段树所存的值并非是下标,而是数组中数的值,可以很方便的解决诸如求区间第k大数的问题 记录一下 #include<bits/stdc++.h> using namespace std; const int N = 1e5+10; int w[N],a[N]; int n; struct node{ int l,r,sum; }tr[N*8]; void build(int root,int l,int r){ tr[root]={l,r,0}; if(l == r)原创 2021-01-02 16:38:31 · 51 阅读 · 0 评论 -
插头dp
难度很大,推荐 直接写暴力+剪枝 插头dp是由《基于连通性状态压缩的动态规划问题》而产生的 eg 模板题 对于每个格子而言只有C24=6C_2^4 =6C24=6种情况,而只会考虑每条小边上的情况,记录是否有边出来,其次应该维护连通性,那几个出来的边属于一个连通块 记录连通块的方法1、最小表示法,则此图的情况为 2、括号表示法(没有最小表示法通用) 由于本题是一个回路,则如有往上的边则一定存在与之配对且向下的边 性质1:两两配对 性质2:路径间不可能交叉 由这两个性质可以视为一个括号序列,则一个三进原创 2020-12-04 20:10:40 · 74 阅读 · 0 评论 -
CDQ分治笔记(持续更新)
CDQ分治 即对于每个i,有多少个j使得aj<=aia_j<=a_iaj<=ai,bj<=bib_j<=b_ibj<=bi,cj<=cic_j<=c_icj<=ci 一维: 排序即可 二维: ①:树状数组解决即可 值域统计后插入元素即可 ②:分治 加双关键字排序(便于处理aj<=ai,bj<=bia_j<=a_i,b_j<=b_iaj<=ai,bj<=bi)的情况 egegeg 逆序对: ①:原创 2020-11-20 20:54:23 · 129 阅读 · 0 评论 -
后缀数组学习笔记(算法进阶课)
后缀数组学习笔记(倍增) 基础定义 子串:就是字符串的一部分,必须连续。 后缀:是一种子串,它的结尾必须为字符串的最后。 大小比较:就是字典序比较,从头开始比,不相同的话字典序大的那个大,假如相同就向后移动。假如移到其中一个串的结尾还相同的话,长的那个大。 后缀数组:把所有的后缀编号,排序后把编号存在这个数组里。 名次数组:存的是每个后缀的名次 在此需要用到基数排序 ...原创 2020-11-17 20:03:15 · 122 阅读 · 0 评论