数据结构(/堆排序/桶/数)
Nowed
把泪水种在心上,一定会开出勇敢的花。
展开
-
[gdkoi 阶乘(fact)][noip2015普及组 求和(sum)]
TitleP2671 求和Code(fact)#include<cstdio>#include<algorithm>#include<cmath>#define ll long long#define rep(i,x,y) for(register ll i=x;i<=y;i++)using namespace std; const ll N=1e6+10; ll T,n,base,q,w,tot,a[N],b[N],prime[N],m,原创 2020-08-17 22:05:34 · 191 阅读 · 0 评论 -
[luogu P5788] 【模板】单调栈
Titlehttps://www.luogu.com.cn/problem/P5788Solution昨天调了我一个晚上的树链剖分,很不爽。所以特地来水一篇博客。Code#include<cstdio>#define rep(i,x,y) for(register int i=x;i<=y;i++)using namespace std; const int N=3e6+5; int n,a[N],f[N],t,sta[N]; int main(){ scanf原创 2020-08-07 15:11:33 · 137 阅读 · 0 评论 -
#堆# [jzoj 4815] ksum
题目解题思路先把1到n1到 n1到n的字段和扔到堆里面,每一次弹出堆顶,显然对于l,r−1l,r-1l,r−1或者l+1,rl+1,rl+1,r的字段和是次大的,所以把l,r−1l,r-1l,r−1或者l+1,rl+1,rl+1,r压进堆里就可以了。代码#include<cstdio>#include<string> #include<queue&g...原创 2019-12-14 14:46:09 · 184 阅读 · 0 评论 -
#均分纸牌问题# [nssl 1440] 能量传输
题目解题思路类比[HAOI2008]糖果传递 {前缀和+均分纸牌问题(中位数)+贪心}把隔0位换成隔k位就可以了。代码#include<cstdio>#include<algorithm>#define ll long long using namespace std; const ll N=5e5+5; ll n,k,a[N],g,q,mid,c...原创 2019-11-14 19:56:14 · 149 阅读 · 0 评论 -
#map/dfs# [jzoj 3888] 【NOIP2014模拟10.25B组】正确答案
题目小H与小Y刚刚参加完UOIP外卡组的初赛,就迫不及待的跑出考场对答案。“吔,我的答案和你都不一样!”,小Y说道,”我们去找神犇们问答案吧”。外卡组试卷中共有m道判断题,小H与小Y一共从其他n个神犇那问了答案。之后又从小G那里得知,这n个神犇中有p个考了满分,q个考了零分,其他神犇不为满分或零分。这可让小Y与小H犯了难。你能帮助他们还原出标准答案吗?如有多解则输出字典序最小的那个。无解输出...原创 2019-11-11 19:11:14 · 288 阅读 · 0 评论 -
#multiset/平衡树/贪心#[luogu2869] [USACO07DEC]美食的食草动物Gourmet Grazers
题目https://www.luogu.org/problem/P2869解题思路我们可以先对两个序列排序。然后显然对于每头牛都有很多可以选的,那么我们必然贪心的选择最小的,这个过程可以用stlstlstl来维护。时间复杂度O(nlogn)O(nlogn)O(nlogn)代码#include<cstdio>#include<algorithm>#inc...原创 2019-11-08 16:32:47 · 141 阅读 · 0 评论 -
[poj 2442] Sequence {二叉堆}
题目http://poj.org/problem?id=2442解题思路显然,对两个序列排序,a[1]+b[1]a[1]+b[1]a[1]+b[1]是最小和,然后次小的就是min{a[1]+b[2],a[2]+b[1]}min\{a[1]+b[2],a[2]+b[1]\}min{a[1]+b[2],a[2]+b[1]},一次类推,便能用堆来维护当前的最小值了。代码#include&l...原创 2019-05-10 22:19:54 · 214 阅读 · 0 评论 -
[bzoj 1150] [ctsc 2007] 数据备份 {二叉堆+贪心}
题目https://www.lydsy.com/JudgeOnline/problem.php?id=1150解题思路先可以发现,最优的配对一定是相邻的。那么问题可以转换成给出n-1个数,求取不超过k个数时的和最小,(而且相邻的两个数不能同时被选上)那么我们可以建一个链表,并把链表映射到一个小根堆上。每一次选最小的。然后把原链表中A[i−1]+A[i+1]−A[i]A[i-1]+A...原创 2019-05-20 18:29:40 · 171 阅读 · 0 评论 -
[jzoj4210] 【五校联考1day1】我才不是萝莉控呢 {哈夫曼树}
题目Description小Y:“小R 你是萝莉控吗。”小R:“…”为了避免这个尴尬的话题,小R 决定给小Y 做一道题。有一个长度为n 的正整数数组A,满足Ai >= Ai+1,现在构造一个数组B,令Bi =。现在,有一个n * n 的网格图,左下角坐标是(1, 1),右上角坐标是(n, n)。有一个小SB正在坐标为(n, 1) 的位置,每一时刻,如果他现在在(x, y),他可以选...原创 2019-01-21 19:37:30 · 273 阅读 · 0 评论 -
[JZOJ 3928] 射击 {优先队列+贪心}
题目大意——有nnn个数,在a[i]a[i]a[i]秒之前破坏了可得到w[i]w[i]w[i]的快乐值,求最大快乐值。解题思路考场的时候敲了一篇很显然的贪心快速排序,对于每一时刻选取最大快乐值,累加求ans(40分)我忘了优先队列怎么打了。其实在快速排序后(按时间从大到小),枚举a[i]a[i]a[i],将正整数压入优先队列(大根堆),然后枚举下一种的结束时间至目前这一种的结束时间,逐次...原创 2018-11-01 15:04:23 · 259 阅读 · 0 评论 -
[] 小X的加法难题&&小 X 的密码破译//2018.10.30
题目解题思路[problem 1] 简单的模拟[problem 2] 用桶排暴力算一算代码(node_1)#include&lt;cstdio&gt;#include&lt;iostream&gt;#include&lt;cstring&gt;using namespace std;int a,b; bool c=1; char s; int main()原创 2018-10-31 21:30:59 · 247 阅读 · 0 评论 -
[jzoj 4788] 序列 {贪心/桶}
题目解题思路我们设d[i]表示a[i]要经过多少次操作后才可到达b[i],设c[i]=d[i]-d[i-1]。那么最朴素的想法答案ans=∑ni=1Max(0,c[i])。但这只是每个数都不会超过自己d[i]的情况,我们还要考虑假设某个数被某个区间包含,后来又多做了4次再次返回自已要求值的情况。显然对于现在的某段区间[i,j],它多做了4次会使c[j]-4,使c[i]+4,那么我们再回想...原创 2019-05-25 17:09:39 · 200 阅读 · 0 评论 -
jzoj 4805. 【NOIP2016提高A组模拟9.28】跟踪 {树+dfs}
题目解题思路不难发现,⽯神和两个陌⽣⼈的⾏动⽅式⼀定是最优策略。转换⼀下思路,考虑对于每个点,⽯神是否能⽐两个陌⽣⼈先到达。计算⽯神到达每个点的最早时间,以及两个陌⽣⼈到达每个点的最早时间。然后对于每个点依次判断是不是可能是最终被追上的位置即可,最迟时间也可以⽅便求得。代码#include<cstdio>#include<algorithm>...原创 2019-06-06 17:05:53 · 180 阅读 · 0 评论 -
[jzoj 4811] 【NOIP2016提高A组五校联考1】排队 {后序遍历+倍增}
题目解题思路“1”问求的是后序遍历。“2”问就是删去这个点到根节点的有颜色的链的最顶端删掉,然后用小根堆来维护。代码#include<cstdio>#include<algorithm>#include<queue>using namespace std; const int N=1e5+10;struct graph{ int ...原创 2019-07-05 07:37:29 · 192 阅读 · 0 评论 -
[jzoj 6308] 中间值 {递归/区间第k大}
题目解题思路假设当前要取的是区间的第kkk 大,将 kkk 折半,放在两个区间的对应位置s,ts,ts,t上,比较a[s],b[t]a[s], b[t]a[s],b[t],不妨设a[s]<b[t]a[s]<b[t]a[s]<b[t],那么答案可以化归至区间[l1,s−1][l2,r2][l1,s-1][l2,r2][l1,s−1][l2,r2]的第k2\f...原创 2019-08-18 17:10:25 · 129 阅读 · 0 评论 -
[jzoj 6305] 最小值 {单调栈}
题目解题思路代码#include<cstdio>#include<cstring>#define ll long longusing namespace std; const int N=200005; ll n,A,B,C,D,a[N],sk[N][2],pre[N],f[N],top=1,max,g[N]; int main(){// freo...原创 2019-08-17 22:09:35 · 171 阅读 · 0 评论 -
[jzoj 6307] 安排 {归并排序}
题目解题思路代码#include<cstdio>using namespace std; const int N=5005; int a[N],ans[2][345680][2],cnt[2],flag,n;inline void swap(int &x,int &y){x^=y,y^=x,x^=y;}void q2(int l,int mid,i...原创 2019-08-17 22:10:39 · 190 阅读 · 0 评论 -
SP1553 BACKUP - Backup Files {二叉堆+贪心}
题目https://www.luogu.org/problem/SP1553解题思路就是数据备份改一下。代码#include<cstdio>#include<algorithm>#include<cstring>#include<queue>#define mp make_pair#define pa pair<int,...原创 2019-08-27 13:30:49 · 182 阅读 · 0 评论 -
[LUOGU 1160] 队列安排{链表}
题目https://www.luogu.org/problemnew/show/P1160解题思路第一次打静态链表,自认为:应该注意一下修改链表的左右端,和确定开头代码#include&amp;amp;lt;cstdio&amp;amp;gt;using namespace std; struct node{ int l,r,data; }a[100011];int n,k,t,m...原创 2018-08-15 22:05:54 · 214 阅读 · 0 评论 -
[vijos 1197] 费解的开关 {深搜+递推}
题目https://www.vijos.org/p/1197解题思路先深搜出第一行的所有情况(对于每一盏灯都可选或不选),然后递推第一层到第四层,如a[i][j]a[i][j]a[i][j]为0,则点a[i+1][j]a[i+1][j]a[i+1][j]。然后判断最后一层,以求是否合法。代码#include<cstdio>#include<cst...原创 2018-08-13 10:27:54 · 810 阅读 · 0 评论 -
[poj 2373] Dividing the Path {单调队列+动态规划}
题目http://poj.org/problem?id=2373解题思路转载至代码#include&amp;lt;cstdio&amp;gt;#include&amp;lt;cstring&amp;gt;#include&amp;lt;deque&amp;gt;using namespace std; deque&amp;lt;int&amp原创 2018-08-15 17:08:34 · 205 阅读 · 0 评论 -
合并果子 {哈夫曼树}
题目题目描述 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。多多决定把所有的果子合成一堆。 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。可以看出,所有的果子经过n-1次合并之后,就只剩下一堆了。多多在合并果子时总共消耗的体力等于每次合并所耗体力之和。 因为还要花大力气把这些果子搬回家,所以多多在合并果子时要尽可能地节省原创 2018-02-05 22:15:43 · 408 阅读 · 0 评论 -
【2017.7.7普及】终极数
题目题目描述给定一个长度为n的序列a,试求出对于序列a的每一个前缀的终极数x,使得 最小,试求出终极数t(如若有多个终极数t,只需输出最小的那个)输入 第一行一个整数n,第二行n个整数,中间用空格隔开 输出 输出一行一个整数,即表示终极数t题目大意由于题目较为苦涩难懂,【先看一下–&amp;amp;amp;gt;解题思路】,其实就是求出多个中位数后,再求多个中位数的中位数……...原创 2018-02-08 07:40:22 · 405 阅读 · 0 评论 -
2009年南海初中竞赛 句子
题目解题思路 动态规划,动态规划转移方程为f[i]=min(f[i],f[i-q[j]]+gg); 其中q[j]为当前字符串的长度,gg为代价。 寻找代价的过程,可以用桶来完成。代码#include&amp;lt;cstdio&amp;gt;#include&amp;lt;iostream&amp;gt;#include&amp;lt;string&amp;原创 2018-03-31 16:26:10 · 158 阅读 · 0 评论 -
【2012.03.09普及组】约数和//2018.2.1
题目题目描述 给你一个数N,需要你算出这个数所有约数的和。(N的约数指能整除N的正整数),例如12的约数有1,2,3,4,6,12。所以约数和为1+2+3+4+6+12=28 输入 本题有多组数据,第一行一个T,表示有T组数据,下面T行,每行一个正整数N表示要处理的数。 输出 T行,每行一个正整数表示输入中对应的数的约数和。题目大意就是求n的每一个约数总和解题思路原创 2018-02-02 14:26:36 · 389 阅读 · 0 评论 -
【普及模拟】奇数统计(count.pas/cpp)//2018.1.31
题目题目描述 给出N个正整数,其中只有一个数出现了奇数次,其余的数都出现偶数次。 求那个出现了奇数次的数。1输入 第一行是N,下一行有N个正整数。 输出 出现了奇数次的数。题目大意就是求一个出现奇数次的数解题思路 因为数据不大,可以用桶解。代码#includeusing namespace std; int n,a[10原创 2018-01-31 20:00:38 · 323 阅读 · 0 评论 -
【2018.1.29普及组模拟】小麦高度 //2018.1.29
题目题目描述 Smart和Sarah在每年的圣诞节都要种植小麦。众所周知,小麦的生长速度不同,经过一段时间后,种植的小麦会参差不齐。他们决定玩以下的游戏来解决这个问题: 1、当轮到Smart的时候,他会选择最短的那个小麦,然后延长高度到第二短的小麦的高度。 2、当轮到Sarah的时候,他会选择最长的那个小麦,然后剪短高度到第二长的小麦的高度原创 2018-01-30 07:34:34 · 649 阅读 · 0 评论 -
【普及模拟】前缀转后缀
题目题目描述我们现实生活中通常使用中缀表达式,但在计算机里会用到前缀表达式以及后缀表达式,他们的含义如下:前缀:先写运算符,接着是第一个操作数,最后是第二个操作数;后缀:先写第一个操作数,接着写第二个操作数,最后写运算符。如中缀表达式3 + 4,在前缀表示为+ 3 4,在后缀里表示为3 4 +,而(5 - 4)- 2的前缀为- - 5 4 2,后缀为5 4 - 2 -。你的原创 2018-02-01 19:40:49 · 1022 阅读 · 0 评论 -
[jzoj 1736] 扑克游戏 {堆,哈夫曼树}
题目解题思路 一道看起来不难的题目,用贪心试着拿部分分。结果合并果子的源程序竟然可以AC,让人惊讶! 当然,也不能是没有任何道理的。转载一份博客,供大家参考代码(合并果子的源程序)#include&amp;lt;cstdio&amp;gt; using namespace std; int n,num,u,ans,a[100001]; void up(int ...原创 2018-07-06 19:44:28 · 270 阅读 · 0 评论 -
逆序对【模板】 {归并排序}
题目如果存在正整数 i, j 使得 1≤i<j≤n1≤i<j≤n1 ≤ i < j ≤ n 而且 A[i]>A[j]A[i]>A[j]A[i] > A[j],则 <A[i],A[j]><A[i],A[j]> 这个有序对称为 AAA 的一个逆序对解题思路直接在归并排序回溯的时候处理逆序对即可代码#include<c...原创 2018-07-19 16:54:42 · 224 阅读 · 0 评论 -
[jzoj 3462] 【NOIP2013模拟联考5】休息 {归并排序(逆序对)+快速排序}
题目Description 休息的时候,可以放松放松浑身的肌肉,打扫打扫卫生,感觉很舒服。在某一天,某LMZ 开始整理他那书架。已知他的书有n 本,从左到右按顺序排列。他想把书从矮到高排好序,而每一本书都有一个独一无二的高度Hi。他排序的方法是:每一次将所有的书划分为尽量少的连续部分,使得每一部分的书的高度都是单调下降,然后将其中所有不少于2 本书的区间全部翻转。重复执行以上操作,最后使得书...原创 2018-07-19 19:12:49 · 246 阅读 · 0 评论 -
绿豆蛙的归宿 {数学期望+拓扑排序+动态规划}
题目Description 随着新版百度空间的上线,Blog宠物绿豆蛙完成了它的使命,去寻找它新的归宿。 给出一个有向无环图,起点为1终点为N,每条边都有一个长度,并且从起点出发能够到达所有的点,所有的点也都能够到达终点。绿豆蛙从起点出发,走向终点。 到达每一个顶点时,如果有K条离开该点的道路,绿豆蛙可以选择任意一条道路离开该点,并且走向每条路的概率为 1/K 。 现在绿豆蛙想知道,从...原创 2018-07-20 12:16:28 · 257 阅读 · 0 评论 -
[USACO06FEB]摊位预订Stall Reservations {优先队列+贪心}
题目http://poj.org/problem?id=3190 https://www.luogu.org/problemnew/show/P2859解题思路正常的贪心(即先排序,每次的寻找还要扫描一遍每一个畜栏的情况)时间复杂度为O(n2)O(n2)O(n^{2})。我们可以用一个小根堆(优先队列/STLpriorityqueueSTLpriorityqueueSTL pri...原创 2018-08-14 16:18:55 · 320 阅读 · 0 评论 -
[luogu 2947][USACO09MAR]向右看齐Look Up {单调递减栈}
题目https://www.luogu.org/problemnew/show/P2947解题思路我们可以开一个单调递减栈,每次加入的元素如比原来的栈顶的数大,就把该数的编号赋给栈顶的数。(注意,栈内应压入编号)代码#include&lt;cstdio&gt;#include&lt;stack&gt;using namespace std; stack&原创 2018-08-14 19:18:36 · 280 阅读 · 0 评论 -
Largest Rectangle in a Histogram {单调栈}
题目http://poj.org/problem?id=2559解题思路 我们建立一个栈,用来保存若干个矩形,这些矩形的高度是单调递增的,或者说,我们期望他是单调递增的。 我们从左到右读入矩形: 如果当前矩形比栈顶矩形高,即满足单调递增,进栈。 否则不断去除栈顶,直至栈空或栈顶高度低于当前矩形。在此过程中,我们累计被弹出的矩形的宽度和(用于计算答案与合并),用高度×...原创 2018-08-14 21:38:42 · 235 阅读 · 0 评论 -
UVA540 Team Queue{队列}
题目http://poj.org/problem?id=2259 https://www.luogu.org/problemnew/show/UVA540解题思路 我们可以建立一个队列a[0]a[0]a[0]存储队伍中所有小组的编号,再为每个小组iii建立一个a[i]a[i]a[i]存储队伍中这个小组的所有成员。 当一个编号为X,组号为YYY的人来队伍时,我们直接把X插...原创 2018-08-15 09:47:55 · 189 阅读 · 0 评论 -
[Hdu4699]Editor {对顶栈}
题目http://acm.hdu.edu.cn/showproblem.php?pid=4699解题思路 这道题可以用像动态维护中位数一样的“对顶栈”算法。建立两个栈,栈AAA存储从序列开头到当前光标位置的这一段子序列,栈BBB存储从当前光标位置到序列结尾的这一段子序列,两者都以光标所在的那一端作为栈顶。这两个栈合起来就保存了整个序列。fff数组维护栈AAA的前缀和的最大值。s...原创 2018-08-15 11:24:22 · 271 阅读 · 0 评论 -
[poj 1958] Strange Towers of Hanoi{递推}
题目http://poj.org/problem?id=1958解题思路本题求nnn盘4塔时的最少步数。设f[n]f[n]f[n]为解nnn盘4塔的最少步数,则有:f[n]=min2∗f[i]+d[n−i](1<=i<n)f[n]=min2∗f[i]+d[n−i](1<=i<n)f[n]=min{2*f[i]+d[n-i]}(1d[i]d[i]d[i]为...原创 2018-08-13 09:13:52 · 176 阅读 · 0 评论 -
堆排序
题目题目描述 输入n个数,要求用堆排序输出从小到大排完序后的结果。解题思路 模板题,堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。 堆有小根堆和大根堆之分的区别,小根堆指的是任意一个father都比他的子节点要小,大根堆与之相反。堆,主体上有两种操作。(up上移)和(down下移)。 up:当a[x]值变小后可能要通过上移操作才...原创 2018-02-05 22:00:26 · 214 阅读 · 0 评论