NOIP2020知识点漏洞及细节汇总(持续更新中)

一.知识点漏洞

1.1.DP

1.1.1.区间DP

注意注意,数据范围一定不能超过 500 500 500,外层循环枚举长度len,内层枚举左端点即可。第三层可有可无,看你怎么定义状态。

1.1.2.状压DP

1.1.3.数位DP

1.1.4.单调队列优化DP

1.1.5.斜率优化

李超树直接秒掉
化成形如 y = k x + b y=kx+b y=kx+b的结构,然后随意搞三个点出来讨论,看是应该维护上凸包还是下凸包。如果是单调的,直接用单调队列,否则建议直接李超树(注意离散化)。

1.1.6.期望DP

1.2.数据结构(非常辣鸡)

1.2.1.线段树/树状数组( O ( n log ⁡ n ) O(n\log n) O(nlogn))

我更喜欢用线段树,好写也好想
适用问题:需要求区间最值或区间的和可以用,毕竟是数据结构,多用于辅助其他算法的实现,比如Dijkstra,树(树链剖分)
核心思想:懒标记
例1.2.1.CF786B Legacy 线段树优化Dijkstra

1.2.2.主席树(可持久化线段树)( O ( n log ⁡ n ) O(n\log n) O(nlogn))

适用问题:查找区间第k小(大)问题
核心思想:空间换时间,建 n n n颗线段树,把两两线段树之间有关系的点连起来,然后前缀和思想就行了。

1.2.3.Tire树+可持久化Tire树( O ( n log ⁡ n ) O(n\log n) O(nlogn))

适用问题:查找前缀出现的次数、某字符串的排名等
核心思想:一条树上路径就代表一个字符串,十分简单
可持久化Tire树其实就是Tire树+主席树,可以直接打,但我喜欢先用Tire求出字符串的排名,再用主席树。
例.1.2.3.牛客模拟赛第五场T3:经典字符串问题

1.2.4.树链剖分

适用问题:①离线求LCA;②动态改变树上点权并要求求点权和
核心思想:轻重链剖分,最多 log ⁡ n \log n logn条重链,爬这么多次即可。
例1.2.4.遥远的国度

1.2.5.平衡树(非旋Treap)

细节多,别打错了,还是FHQ_Treep好写

void split_v (int rt, int v, int &x, int &y){
   
	if (! rt){
   
		x = y = 0;
		return ;
	}
	pushdown (rt);
	if (tree[rt].data <= v){
   
		x = rt;
		split_v (tree[rt].r, v, tree[rt].r, y);
	}
	else{
   
		y = rt;
		split_v (tree[rt].l, v, x, tree[rt].l);
	}
	pushup (rt);
}
void split_k (int rt, int k, int &x, int &y){
   
	if (! rt){
   
		x = y = 0;
		return 0;
	}
	pushdown (rt);
	if (tree[tree[rt].l].siz >= k){
   
		y = rt;
		split_k (tree[rt].l, k, x, tree[rt].l);
	}
	else{
   
		x = rt;
		split_k (tree[rt].r, k - tree[tree[rt].l].siz - 1, tree[rt].r, y);
	}
	pushup (rt);
}
int merge (int x, int y){
   
	if (! x || ! y)
		return x + y;
	pushdown (x), pushdown (y);
	if (tree[x].value < tree[y].value){
   
		tree[x].r = merge (tree[x].r, y);
		pushup (x);
		return x;
	}
	else{
   
		tree[y].l = merge (x, tree[y].l);
		pushup (y);
		return y;
	}
}

1.2.6.单调队列/单调栈(多用于优化 O ( n 2 ) O(n^2) O(n2)的算法)

适用问题:一旦满足单减或单增,又不是二分答案,均可用此优化,常用于优化DP。
核心思想:最有情况往往存在队头,先判断对头是否在范围内,将其弹出,再判断队尾会不会被当前要放入的元素淘汰,然后把当前元素放进队尾。
例1.2.6.牛客模拟赛第六场T2:艰难睡眠

1.2.7.启发式合并

1.2.8.set

带有自动排序,自动去重,删除,插入等操作,实用但常数大
例1.2.8.BalticOI 2009 Day1 T2「Candy Machine」二维偏序+set

1.3.期望

即概率的倒数,至少现在我能做出来的期望题目都是这样

1.4.二分与三分

这种算法很常见,通常二分或三分答案,比如问你满足条件p的最小的/最大的q

1.4.1.二分 O ( log ⁡ n ) O(\log n) O(logn)

适用问题:答案满足单调性。
核心思想:通常二分答案然后check

1.4.2.三分 O ( log ⁡ n ) O(\log n) O(log

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值