1.xor运算,双xor一个数得到原数不变(2n+1)
2.3n+1
定义一个新的运算为 @ 规定为三进制不进位的加法
1 @ 1 @ 1 =0
2 @ 2 @ 2 =0
3n+2
考虑1 @ 1 =2;2 @ 2 =1;
如果出现三次,=0,则最后答案由出现两次的提供!
3.最大空白矩阵:
维护二维前缀和+暴力!
悬线法?枚举左上角+右下角
3.种地方案
先考虑一维空间如何做?
2 3 3 6 6 9 2 7
t>6
浮动光标?滑动窗口?
????
4.借教室!
差分?
二分?
5.RMQ
取ans=max(a[li....ri])
而对于ans,有ans=max(a[li,li+(ri-li)/2],a[li+(ri-li)/2,ri]);
6.区间取模计数
当p<100 预处理+二分
当p>=100 p<10000
递推位置
7.淹水
正着想不太好想,倒过来做,先把所有的城市都阉掉,将该淹掉的城市保留
还原每个水面上的城市,并且处理联通合并
8.淹水升级(星球大战)
考虑像刚才一样维护并查集,对于集合u,如果加入城市v,贡献sum+=size(u)
但是,数据范围1e6不可行!
如果n个城市联通
(n-1)+(n-2)+(n-3)+....+1=n(n-1)/2;
还是考虑刚才倒着做的过程,当合并某个集合S1,S2时
S1,s2对答案的贡献就是S1*S2!
(其实最多就是合并四个集合!)
9.关押罪犯
考虑维护两个监狱,对于罪犯i,j,将他们按照冲突概率排序
10.石头剪子布
1.带权柄茶几
2.拆点并查集
11.馒头
曼哈顿距离???
ri代表i这个数的前驱
若ri==i表示i的树根
当我们删掉一个数的时候
ri==getroot(i-1);
12.维护中位数
维护两个堆
一个开大根对,一个开小根堆
保证上面大根堆的数都比下方的大
13.左偏树
14.树状数组:lowbit操作
int lowbit n = x & -x;
-x为x的补码
设x=100100
相当于更高一位的1000000
100100
做减法
0011100
从第一个1开始与原来相同
之后相当于按位取反!
所以100100 & 011100 = 1000;
15.用树状数组维护差分数组 update(x,a[x]-a[x-1]);
16.区间修改,区间查询?
PM:
1.线段树
维护某种奇怪的东西
一个 n ? m 的点阵, 每行内部没有连接. 仅有若干处于相邻两行
之间的点有边 (单向, 只能从上到下).
若干次查询某两个点之间的路径条数, 或增/删一条边 (依然满足
上述条件).
n, q ≤ 1e5, m ≤ 1e2.
考虑一个DAG,两点间的方案数目
正常:拓扑排序+DP
线段树的叶子节点存储了一个类似于邻接矩阵的东西;
线段树自带拓扑序;
对任意一个子树结构,表示出他的邻接矩阵Mfa
Mfa[i,j]=ΣMlch[i,k]*Mrch[k,j];
线段树维护矩阵,只要他的左右两个区间可以合并,那么就可以考虑使用线段树
来合并!
矩阵乘法!
2.维护数列,支持区间设为一个数,查询区间内有多少段不同的数
1.记录总共有多少段数,记录线段树的这一个节点左端点的数和有断点的数
2.合并时,比较两个区间的左右度端点,决定是否加1
3.奇妙的高度
类似于从一个方向看一列高度不同的楼?可以看到多少栋楼?
(1)分块?+二分???二分不是应该在有序表中进行的吗???
(2)考虑线段树,节点维护节点的最大楼高,设其为tallest,
左右儿子的maxh 为 hL,hR;
(3) count,rightcontri,tallest
4.巨大的查找
初始全是0
相当于一个巨大的lazytag
考虑当前的lazytag的pushdown操作:
不一定需要把儿子开出,即不一定需要件数
lazy:all=0
左右儿子为null
现在考虑修改操作!修改时现开他的儿子!
左右两边还有lazy
继续递归下去修改
只有访问到了某个点才需要开出那个节点,每次访问只
开logN个节点,所以我们可以把线段树的空间复杂度
控制在mLogN,这样不能支持动态开点了!
需要解锁指针线段树技能
5.计算几何?
求所有矩形的覆盖面积?
离散化:压缩到较小的区间内,可以不需要动态开点就实现
扫描线
6.加强版扫描线
只关心k范围内的数据,维护<=k个巨型覆盖的
7.搜索树?
如何建立一个二叉搜索树
中序遍历
每次调中间的节点作为根节点建立子树
替罪羊树(没有旋转调代码难,不会TLE)
对一个大小为n的树,均摊复杂度为nlogn
求出每个节点的子节点个数
定义不平衡因子index为左右儿子中的较大值除以它自己的大小
定义index>0.7时为不平衡现象
每次插入时沿着链插入
当链上最大的ub index > 0.7
重构不平衡子树
1.研究哈希算法、哈希表和KMP(ok)
2.学习平衡树Treap(ok)
3.悬线法:https://wenku.baidu.com/view/bc8311f69e314332396893f7.html
4.线段树的高级应用:节点维护邻接矩阵/区间取模计数/扫描线 线段树
5.特殊的并查集:食物链/星球大战/种类并查集
原文地址:https://www.cnblogs.com/little-cute-hjr/p/11618840.html