队列
队列
gongyuandaye
不要再问我会不会写可持久化非确定状态AC自动分块维护线段平衡仙人掌优化最小费用最大流预处理混合图上莫比乌斯反演莫队带花舞蹈链并查集树状数组套主席树预处理动态DP分治FFT求多项式逆元对数函数的指数函数用可持久化并查集合并最小费用循环流上插头DP了。
展开
-
Gym 101911C Bacteria (最小堆)
题意:n个元素,每次选两个相同元素出来,若没有,则新增一个,然后将两数之和放回原序列,问最后能否只剩一个元素,且新增多少个。题解:最小堆模拟取的过程即可。#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<algorithm>#include<queue>#原创 2020-10-06 20:16:53 · 114 阅读 · 1 评论 -
2020牛客多校二 F. Fake Maxpooling (二维单调队列)
题意:n * m的矩阵,Ai,j=lcm(i, j),给出k,求所有k * k子矩阵中最大值之和。题解:二维单调队列先用单调队列处理列上的每段的最大值,再处理行上的。求lcm的时间太多了,看了看别人的代码,可以用下面这种方法,因为先处理的永远包含质数。if (!a[i][j]) for (int k = 1; k * i <= n && k * j <= m; ++k) a[k * i][k * j] = i * j * k;#define _CRT_SECUR原创 2020-07-19 15:25:32 · 234 阅读 · 0 评论 -
POJ 2442 Sequence (优先队列|堆)
题意:n组序列,每组有m个数,从每组数中各选1个,则共有m^n种和,输出最小的前m个和。题解:优先队列|堆代码写的太乱了,别看。用优先队列维护大小为m的最大堆。先将第一行序列放进队列,同时用数组a[]存优先队列中的m个元素,并升序排序(更快)。队列清空。接着考虑下一组,对于该组每一个元素x,将a[0]+x放入队列,然后遍历所有组合a[i]+x,维护大小为m的最大堆。#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include&原创 2020-06-11 23:25:09 · 217 阅读 · 0 评论 -
POJ 2010 Moo University - Financial Aid (优先队列)
题意:c头牛,每头有 sc 和 f 两个指标,选出n头牛(奇数),使得这n头牛的sc中位数最大,且Σf<=F。题解:优先队列。要使得sc中位数最大,考虑每头牛的sc成为中位数的可能,先对sc升序排序。对于每一个中位数iii,左右两边都有n/2头牛,要使得Σf<=F,那么左右两边的f之和都要尽可能小,我们用优先队列维护n/2大小的最大堆,记录iii左右最小f之和low[]low[]low[]、up[]up[]up[],最后从后往前遍历,第一个满足Σf<=F的就是答案。#define原创 2020-06-11 22:38:58 · 105 阅读 · 0 评论 -
CodeForces 1216F Wi-Fi (单调队列+dp)
题意:有n个房间,需要把n个房间全部连上网,可以使用i的代价直接将第i个房间连上网。有一些房间可以放路由器,代价也是他的标号i,路由器可以使得i-k,到i+k之间所有房间通上网,求最小代价使得全部房间通网。题解:单调队列+dpdp[i]dp[i]dp[i]:从1到iii需要的最小代价。遍历1到n+kn+kn+k,因为有的房间路由器范围超过了右端点但能使代价减小。对于点iii,若i−ki - ki−k存在放路由器的点,则[i−2∗k,i][i - 2 * k, i][i−2∗k,i]都可覆盖,那么就需原创 2020-06-07 20:43:04 · 355 阅读 · 0 评论 -
CodeForces 253D Table with Letters - 2 (暴力+双指针)
题意:给出一块字母矩形,求字母a的数量不超过k,且四角字母相同的子矩阵个数。题解:暴力+双指针O(n4)会超时。先用sum[i][j]sum[i][j]sum[i][j]预处理从该点向左上辐射区域中,字母a的数量。然后对于选中的每两行,用双指针l、rl、rl、r选定左右两列,框定子表,类似单调队列,当rrr不满足时(字母a数量超过k),向右移动lll。我们用cnt[]cnt[]cnt[]记录当前子表每列中最上行字母等于最下行字母的数量,当rrr到达最右端时,减去自身1,就是满足条件的子表数量。#原创 2020-06-07 16:49:23 · 164 阅读 · 0 评论 -
CodeForces 140C New Year Snowmen (贪心+优先队列)
题意:n个数,选三个严格下降的数为一组,求最多能选多少组,并列出每组哪些数。题解:贪心+优先队列最多能选多少组,那么必须贪心数量多的。例如:1 1 2 3 4 5如果按照数的大小排序,只能贪到1组,如果按照数量排序,那么就是2组。这样一来,我们可以建立以数量为标准的优先队列,每次选择数量前3多的数为一组即可。#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<cstdio>#include<str原创 2020-06-04 23:13:45 · 160 阅读 · 0 评论 -
CodeForces 1064D Labyrinth (bfs+优先队列)
题意:给出一个图,有障碍,给出起点坐标,以及向左、向右限制的步数,求最多能走多少个点。题解:bfs+优先队列因为向左、向右都限制了步数,导致有的地方因为vis数组的原因无法访问。xxxxxxx...xxxx.x.x....x.x.xx.x......xxxxx..S.....S是起点,假设向右能走5步,那么图中标红的点就无法到达,因为向右走的那条路线将其他路线能走的点的vis置1了。这样一来,我们可以考虑对于剩余步数多的点先走,就不会出现上述情况。我们可以用优先队列来做,注意结构体中原创 2020-06-04 22:48:51 · 184 阅读 · 0 评论 -
CodeForces 982B Bus of Characters (优先队列)
题意: 有n行的椅子,每行有两个椅子,第i行的椅子的宽度为wi。 第二行输入一个长度为2n字符串,代表两种人,0表示一种人,他们只会选择坐在一行没人的位子上,如果有多个地方满足条件,他会选择宽度最小的凳子;1表示一种人,他们只会选择在坐在一行有一个人坐的位子上,如果有多个地方满足条件,则他们会优先选择宽度最大的凳子。询问这2n个人分别坐在在哪一行。题解:优先队列0按照宽度就坐,放进优先队列,等1坐满取出即可。#define _CRT_SECURE_NO_WARNINGS#include<io原创 2020-05-30 16:03:02 · 317 阅读 · 0 评论 -
CodeForces 546C Soldier and Cards (队列)
题意:两个士兵打牌,按顺序出牌,若a的牌比b大,则把b的牌放到a的最后,再把a的这张牌放到b的那张排后面。最后没牌的输掉。若无解输出-1。题解:队列队列模拟一下。注意无解并不一定是循环,所以当出牌次数达到1e5的时候,终止即可。#define _CRT_SECURE_NO_WARNINGS#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<原创 2020-05-30 15:58:31 · 186 阅读 · 0 评论