数据结构——单调队列
#
夕林山寸
这个作者很懒,什么都没留下…
展开
-
2020牛客暑期多校训练营(第二场)F Fake Maxpooling 单调队列+筛法
筛法求Onm出lcm,然后二维单调队列。 细节看代码就懂了 #include <bits/stdc++.h> using namespace std; typedef long long ll; #define pb push_back const int M = 5000+7; int a[M][M],b[M][M],q[M]; int main() { ios::sync_with_stdio(false); cin.tie(0); int n,m,sz; sc原创 2020-07-13 21:18:46 · 432 阅读 · 0 评论 -
算法竞赛——进阶指南——acwing 358. 岛屿 基环树求直径
由于每个点都要连一个边。 最终图会分成若干个联通块,每个联通块n个点,n条边。即是一个基环树。 求出每个联通块中任意两点距离最大值(即基环树的直径)求和即可。 一般基环树的问题围绕环来处理。 先把环看出一个点,就能转化为树上问题。 基环树的直径分两类:(把环当成根节点) 1.不在环上,在环的某个节点的子树中。 2.经过环上2点x,y。并延申至x,y所在子树。即dis(x,y)+D[x]+D[y] .D[x]为dp求直径时维护的,x到其子树中点的最远距离。 我们先求出基环树的环 :s1,s2.原创 2020-06-18 17:17:20 · 625 阅读 · 0 评论 -
acwing 289. 环路运输 单调队列 经典题回顾
重新做了这道题,对单调队列的认识加深了! 枚举一个端点,另一个端点在队首为最优解。 及时扔掉不优解。 每个元素最多入队出队一次。 在优化DP时经常用到。 主要先构造出单调的函数,使得可以枚举一个端点,然后队列维护单调元素。 变成O1找另一个端点。 #include <bits/stdc++.h> using namespace std; typedef long long ll; const int M = 1e6+7; int a[M],q[M]; int main() {原创 2020-06-18 12:55:01 · 139 阅读 · 0 评论