
数据结构——单调队列
#
夕林山寸
这个作者很懒,什么都没留下…
展开
-
2020牛客暑期多校训练营(第二场)F Fake Maxpooling 单调队列+筛法
筛法求Onm出lcm,然后二维单调队列。细节看代码就懂了#include <bits/stdc++.h>using namespace std;typedef long long ll;#define pb push_backconst 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 · 466 阅读 · 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 · 758 阅读 · 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 · 158 阅读 · 0 评论