数据结构
EnjoyingAC
bugger,写bug爱好者。
展开
-
Hiho #1488 : 排队接水(大批量区间查询+维护前缀和+查询一个值在区间的排名)
题目Description有n个小朋友需要接水,其中第i个小朋友接水需要ai分钟。由于水龙头有限,小Hi需要知道如果为第l个到第r个小朋友分配一个水龙头,如何安排他们的接水顺序才能使得他们等待加接水的时间总和最小。小Hi总共会有m次询问,你能帮助他解决这个问题吗?假设3个小朋友接水的时间分别是2,3,4。如果他们依次接水,第一位小朋友等待加接水的时间是2,第二位小朋友是5,第三位小朋友是...原创 2019-04-07 11:09:36 · 360 阅读 · 0 评论 -
HDU 5945 Fxx and game 单调队列优化dp
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=5945题目Young theoretical computer scientist Fxx designed a game for his students.In each game, you will get three integers X,k,t.In each step, you ...原创 2018-08-05 19:18:54 · 251 阅读 · 0 评论 -
POJ 2823 Sliding Window 单调队列
题目链接http://poj.org/problem?id=2823题意给定一个长度为N的序列,输出所有区间长度为M的区间的最小值和最大值解题写莫队写得有点烦。随便找的单调队列裸题水一水。 我个人对单调队列的理解就是队首元素就是你要的东西。比如要求滑动窗口最小值,队首就应该是整个队列的最小值,也就是说维护一个单调上升的队列。然后每个元素都要往队列里塞,刚好满足单调性就刚好排后...原创 2018-08-05 16:47:31 · 132 阅读 · 0 评论 -
2018多校赛第二场 Naive Operations (线段树+思维)
题意初始化a数组都为0,b数组的值为一个固定的排列数。 然后有两个操作: add l r:将a数组[l,r]的值都加1. query l r:查询区间[l,r]累加和下取整(ai/bi)。解题题目出得这么像线段树,那么不妨往线段树方面想。 用线段树维护区间信息sum和c,sum表示下取整之和,c表示这个区间最少需要经过多少次add操作才会导致sum的值加1. 并用一个lazy...原创 2018-07-27 21:20:20 · 223 阅读 · 0 评论 -
2018多校赛第二场 Swaps and Inversions(树状数组求逆序对+离散化)
题意给定一个数组a,每存在一个逆序对需要付出x的代价,每交换两个相邻的元素需要付出y的代价。 求最少付出代价。解题模拟一下交换操作,会发现将一个无序的数组变成一个不降序数组所需操作次数恰好是数组中逆序对存在的个数。所以最小代价就是min(x,y)*逆序对的个数。求逆序对的个数可以用归并排序或者本文所用的树状数组(个人觉得比较好写)。 数组值的范围比较大,所以需要离散化。所谓离散...原创 2018-07-27 21:10:22 · 153 阅读 · 0 评论 -
BZOJ 2038 [2009国家集训队]小Z的袜子(hose)(莫队)
题目链接https://www.lydsy.com/JudgeOnline/problem.php?id=2038题目作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿。终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命…… 具体来说,小Z把这N只袜子从1到N编号,然后从编号L到R(L 尽管小Z并不在意两只袜子是不是完整的一双,甚至不在意...原创 2018-08-05 13:13:00 · 173 阅读 · 0 评论 -
POJ 2796(单调栈)
题意给定一个数组a[1..n],求一个连续序列[l,r],要求a[l..r]的最小值乘以sigma(a[l..r])最大。输出最大值和区间。解题枚举区间最小值h=a[i]。 从i开始向左开始遍历求出第一个值比a[i]小的值的下标L[i]。 从i开始向右开始遍历求出第一个值比a[i]小的值的下标R[i]。 那么,最小值为a[i]的区间就是[L[i]+1,R[i]-1]。 用一个前...原创 2018-07-31 17:29:48 · 313 阅读 · 0 评论 -
莫队算法的学习
莫队算法问题: 给定一个长度为N的序列,然后对M个区间[l,r]进行查询。 解题: 离线区间问题,莫队无敌。 对M个查询按照 l 所属的块号(块的大小为sqrt(N))为第一优先级、r的大小为第二优先级排序。 然后根据当前的区间[L,R]的答案去推导出下一个区间[L’,R’]的答案。 这样,每查询一个区间,需要移动abs(L-L‘)+abs(R-R’)次。 而移动一次的时间复杂度...原创 2018-08-05 10:53:34 · 134 阅读 · 0 评论 -
HDU 1506 Largest Rectangle in a Histogram(单调栈的经典应用)
题意给定n个矩形组成的图,矩形的底都相等,高不同。从图中选一个最大的矩形并求出其面积。解题枚举所选取的矩形的高度为h[i]。 那么,需要求出从i向左遍历第一个比h[i]小的值的下标。以及从i向右遍历第一个比h[i]小的值的下标。 而上述功能恰恰是单调栈的经典应用。 所以,我们同时O(n)的时间复杂度求出L[i]和R[i],然后O(n)枚举h[i]即可。AC代码#inc...原创 2018-07-31 16:17:05 · 125 阅读 · 0 评论 -
单调栈的学习
单调栈的经典应用单调栈的经典应用是在O(n)的时间复杂度内求出所有的L[i]和R[i]。 L[i]表示从i向左遍历第一个比a[i]小/大的值的下标。 R[i]表示从i向右遍历第一个比a[i]小/大的值的下标。 如果是小的话,维护一个单调递增栈;否则,维护单调递减栈。代码const int maxn=1e5+7;int h[maxn],n;int L[maxn];//L[...原创 2018-07-31 16:11:08 · 246 阅读 · 0 评论 -
2018多校赛第三场 Ascending Rating(单调队列)
题意给定数组a[1..k],然后给出一个求a[k+1..n]的递推公式。m表示一个区间长度。现要求出所有区间长度为m的区间的maxrating和count。maxrating表示这个区间的最大值,count表示这个区间的上升序列长度。解题维护所有固定长度区间的最大值,显然是单调队列的经典应用。 而count可以在O(n)维护maxrating值时同时维护。 从后往前进行遍历数组元素...原创 2018-07-31 11:05:26 · 211 阅读 · 0 评论 -
HDU 1255 覆盖的面积 (矩形面积并变形)
解题求覆盖至少两次的面积。 用sum表示被覆盖至少一次的长度,用ss表示被覆盖至少两次的长度。这题与hdu1542的区别就在于更新ss。 首先像hdu1542那样去更新sum(因为需要用到sum去更新ss)。 根据该区间被完全覆盖的次数来更新ss: 如果add大于1,那么ss等于整个区间。 如果add等于1,那么ss等于左子树的sum值加右子树的sum值。(因为该区间被完全覆盖一次,...原创 2018-06-18 11:33:52 · 175 阅读 · 0 评论 -
HDU1542 Atlantis (矩形面积并,扫描线+离散化+线段树)
题意给定n个矩形的左下坐标和右上坐标。求这n个矩形的面积的并集。解题扫描线: 这个还是很好理解的。n个矩形有2n条分割线,从下到上扫描,每次扫描到分割线都累加一次面积。即通过分割线将矩形并分成2n-1割图形。 离散化: 每次累加面积是通过两条分割线的高度差*被覆盖的区间长度完成的。所以我们要维护这个被覆盖的区间。因为x坐标的值达到了1e5的数量级,而矩形的数量级才1e2.故对x坐...原创 2018-06-18 10:23:38 · 294 阅读 · 0 评论 -
FZU2297 Number theory (线段树单点修改、区间查询)
题意初始x=1,下面有Q次操作。 操作M yi:x=x*yi 操作N di:x=x/ydi 每次操作后都输出x的值。保证每次di的值都不一样。分析考虑暴力维护: 用一个数组y[Q+1]记录每个yi的值,初始化yi的值都为1。对于操作M yi,将第i个值改为yi。对于操作N di,将第di个值除以ydi,因为每次di的值都不一样,故除以ydi后的ydi的值为1。每次都输出y[1]...原创 2018-06-25 09:26:52 · 532 阅读 · 0 评论 -
HDU2102 A计划(BFS)
解题比较坑的就是讨论从本格子向另一层走还是本层左右上下移动。并不是所有从队列出来的格子都能进行上下左右移动的,只有非‘#’格子才能。注意这一点后,就是一个常规的BFS了。AC代码#include <cstdio>#include <iostream>#include <cstring>#include <algorithm>...原创 2018-06-22 17:19:38 · 224 阅读 · 0 评论 -
HDU - 2181 哈密顿绕行世界问题 (DFS并用数组记录路径)
解题这题DFS比BFS好写很多。 共用一个vis数组来标记已走过的城市,ans记录第i个走过的城市。 根据DFS的深度来进行判断是否递归到终点。AC代码//0ms 1.8MB#include <cstdio>#include <algorithm>#include <iostream>#include <cstring>...原创 2018-06-22 15:53:01 · 164 阅读 · 0 评论 -
POJ3264 Balanced Lineup (区间查询最大值、最小值)
题目链接http://poj.org/problem?id=3264 给你一个长度为n的序列a[N] (1 ≤ N ≤ 50000),询问Q(1 ≤ Q ≤ 200000) 次,每次输出[L, R]区间最大值与最小值的差是多少。Input 多组用例 第一行是两个整数 N,Q 然后是N个数a[i] 保证a[i] 都小于1e9 然后是Q个询问 每次给你L,R 保证(1<=L&l...原创 2018-05-31 21:25:10 · 339 阅读 · 0 评论 -
HDU3974 Assign the task (修改子树对应到区间修改)
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=3974题目There is a company that has N employees(numbered from 1 to N),every employee in the company has a immediate boss (except for the leader of who...原创 2018-05-31 16:36:43 · 317 阅读 · 0 评论 -
【Jzoj1771】烽火传递 单调队列优化dp
题目链接http://swordoj.win/problem/577题目烽火台又称烽燧,是重要的军事防御设施,一般建在险要或交通要道上。一旦有敌情发生,白天燃烧柴草,定代价。 为了使情报准确地传递,在连续m个烽火台中至少要有一个发出信号。请计算总共最少花费多少代价,才能使敌军来袭之时,情报能在这两座城市之间准确传递。 【输入格式】 第一行:两个整数N,M。其中N表示烽火...原创 2018-08-05 19:43:57 · 461 阅读 · 0 评论 -
01字典树的学习
01字典树的应用范围问题: 给定一个数值集合,然后给出一个数K,问集合中哪个数与K的异或和最大。 解题: 将数值集合中的数都变成一个个二进制串。然后将这些“字符串”插入字典树中。 查询时,从根节点遍历到叶子结点,每次尽量走与K值当前数位不同的结点。01字典树插入值//将数a插入到字典树中int ch[32*maxn][2];//字典树ll val[32*maxn];/...原创 2018-08-06 09:26:24 · 662 阅读 · 0 评论 -
BZOJ 4262 Codechef REBXOR 01字典树
题目链接https://www.lydsy.com/JudgeOnline/problem.php?id=4260题目 Input 输入数据的第一行包含一个整数N,表示数组中的元素个数。 第二行包含N个整数A1,A2,…,AN。 Output 输出一行包含给定表达式可能的最大值。 Sample Input 51 2 3 1 2 Sample Output 6 H...原创 2018-08-06 10:24:14 · 207 阅读 · 0 评论 -
迷宫寻路(BFS、Java实现)
题目假设一个探险家被困在了地底的迷宫之中,要从当前位置开始找到一条通往迷宫出口的路径。迷宫可以用一个二维矩阵组成,有的部分是墙,有的部分是路。迷宫之中有的路上还有门,每扇门都在迷宫的某个地方有与之匹配的钥匙,只有先拿到钥匙才能打开门。请设计一个算法,帮助探险家找到脱困的最短路径。如前所述,迷宫是通过一个二维矩阵表示的,每个元素的值的含义如下 0-墙,1-路,2-探险家的起始位置,3-迷宫的出口,...原创 2019-03-07 08:22:15 · 2314 阅读 · 0 评论 -
CF1073B Vasya and Books(队列)
题目链接http://codeforces.com/problemset/problem/1073/B题意给定n,长度为n的数组1,长度为n的数组2。按照数组2的顺序从数组1中拿值,求每拿一个值需要的步数。如果该值已在包中,步数为0.题解用一个标记数组vis记录下某个值是否已拿;未拿的话就用cnt去计数拿到该值的步数即可。AC代码#include <bits/stdc++.h...原创 2018-10-29 11:03:14 · 224 阅读 · 0 评论 -
51nod 1732 婚姻介绍所 (后缀数组、RMQ)
题目题解学过后缀数组的话,读完题基本就可以直接写了。(送分题?)先求出后缀数组和高度数组,然后ST预处理lcp值的范围最小值,最后O(1)查询即可。debug: 这个送分(命)题,我写了两个神奇的bug。 第一个是每次倍增排序后确定排名时cmp内应该比较的是sa[i-1]和sa[i].因为你要比较下第i名与第i-1名是否排名相同,肯定是比较第i名的后缀而不是i后缀。 第二...原创 2018-09-13 13:04:41 · 269 阅读 · 0 评论 -
51nod 1107 斜率小于0的连线数量 (树状数组求逆序对、离散化)
题目链接https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1107题意二维平面上N个点之间共有C(n,2)条连线。求这C(n,2)条线中斜率小于0的线的数量。 二维平面上的一个点,根据对应的X Y坐标可以表示为(X,Y)。例如:(2,3) (3,4) (1,5) (4,6),其中(1,5)同(2,3)(3,4...原创 2018-09-07 16:36:19 · 170 阅读 · 0 评论 -
51nod 1255 字典序最小的子序 (栈、贪心)
题目链接https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1255题意给出一个由a-z组成的字符串S,求他的一个子序列,满足如下条件:1、包含字符串中所有出现过的字符各1个。 2、是所有满足条件1的串中,字典序最小的。例如:babbdcc,出现过的字符为:abcd,而包含abcd的所有子序列中,字典序...原创 2018-09-10 12:49:06 · 493 阅读 · 0 评论 -
Wannafly挑战赛23 A字符串 (求最短的子串包含所有小写字母)尺取法
题目链接https://www.nowcoder.com/acm/contest/161/A题意小N现在有一个字符串S。他把这这个字符串的所有子串都挑了出来。一个S的子串T是合法的,当且仅当T中包含了所有的小写字母。小N希望知道所有的合法的S的子串中,长度最短是多少。题解尺取法。 枚举区间的较高效的方法。先初始化区间为[0,-1]. 然后找到右区间r,使得区间[l,r]...原创 2018-09-03 22:00:21 · 611 阅读 · 0 评论 -
51nod 1307 绳子与重物 (树链剖分、并查集、线段树)
题目链接https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1307题意 题解树链剖分暴力莽。将每根绳子的承重对应到点的值上。每挂一根绳子,该绳子对应的点到“最上面的点”的值都减w[i]。当这个区间上的点的最小值小于0了,那么绳子就会断。显然就可以用树链剖分将路径对应到区间,用线段树维护区间修改...原创 2018-09-11 23:17:42 · 247 阅读 · 0 评论 -
Codeforces1029C Maximal Intersection(multiset)
题目链接http://codeforces.com/problemset/problem/1029/C题意给定n个段,要求删掉一个段,使得剩下的n-1个段的交集最大。[1;5]和[3;10]的交集是[3;5],大小是2. [1;5]和[5;7]的交集是[5;5],大小是0. [1;5]和[6;6]的交集是空,大小是0.题解观察发现,n个段的交集为[ansL,ansR]....原创 2018-09-01 12:58:41 · 214 阅读 · 0 评论 -
LA 4670 Dominating Patterns AC自动机
题目链接https://vjudge.net/problem/UVALive-4670题意有n个由小写字母组成的字符串和一个文本串T,你的任务是找出哪些字符串在文本中出现的次数最多。输出最多出现的次数,接下来每行包含一个出现次数最多的字符串,按照输入顺序排列。解题将n个字符串插入字典树,然后通过bfs寻找后缀结点构建ac自动机。 将文本串与ac自动机去匹配,统计每个字符出现的...原创 2018-08-08 10:20:10 · 236 阅读 · 0 评论 -
HDU 1394 Minimum Inversion Number 权值线段树
题意给定一个排列. 将该排列的第一个数移动到最后面,重复n-1次,形成总共n个排列。 问哪个排列中所含逆序对最少,输出最少逆序对数。题解求逆序对有很多种方法,O(n^2)的暴力,O(nlogn)的树状数组、归并排序等。 这里,采用的是权值线段树。 所谓权值线段树,就是用数值去建立线段树,每个结点所代表的区间[l,r]维护的是值在[l,r]中出现的次数。 这样,每插入一个值x,...原创 2018-08-12 19:51:09 · 202 阅读 · 0 评论 -
BZOJ 3343 教主的魔法 (分块)
题目教主最近学会了一种神奇的魔法,能够使人长高。于是他准备演示给XMYZ信息组每个英雄看。于是N个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为1、2、……、N。 每个人的身高一开始都是不超过1000的正整数。教主的魔法每次可以把闭区间[L, R](1≤L≤R≤N)内的英雄的身高全部加上一个整数W。(虽然L=R时并不符合区间的书写规范,但我们可以认为是单独增加第L(R)个英雄的身高)...原创 2018-08-03 10:19:40 · 169 阅读 · 0 评论 -
ACdream 1738 世风日下的哗啦啦族I(分块)
题目链接https://vjudge.net/problem/204321/origin题目“世风日下啊,女生不穿裙子的太少了” “这不是社会的进步吗(逃” “哎,是否可以建立一种结构统计一下各学院各专业各班级女生穿裙子的数量以及裙子的长度” “然后查询区间裙子最短值?” “并输出这个区间 穿这个裙子长度的妹子 有多少个?” “然后判断下在有风的情况下,多少妹子是安全的.”...原创 2018-08-03 10:13:04 · 151 阅读 · 0 评论 -
bzoj 2002 [Hnoi2010]Bounce 弹飞绵羊 (分块)
题目链接https://www.lydsy.com/JudgeOnline/problem.php?id=2002题目Description 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏。游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置设定初始弹力系数ki,当绵羊达到第i个装置时,它会往后弹ki步,达到...原创 2018-08-03 08:53:46 · 154 阅读 · 0 评论 -
LA 3942 Remember the Word 字典树 DP
题目链接https://vjudge.net/problem/UVALive-3942题意给定一个字符串str和N个单词s。把这个字符串分解成若干个单词的连接(单词可以重复使用),有多少种方法?解题题目可以理解为由空串“走”到目标串str。每次走的“步数”恰好是一个单词。比如有单词a、b、cd、ab。目标串为abcd。可以由空串走到a,b,cd,ab。然后可以从a走到aa,ab...原创 2018-08-07 14:47:54 · 183 阅读 · 0 评论 -
分块算法的学习
分块将区间长度为n的数组分成sqrt (n)个块,每块的大小是sqrt (n)。 对区间[L,R]进行操作: 如果在一个块里面,暴力更新即可。O(sqrt n)级别。 不在一个块里面: 开头一部分,暴力更新,O(sqrt n)级别。 结尾一部分,暴力更新,O(sqrt n)级别。 中间连续的块,打一个延迟标记,不用更新到具体的点,O(sqrt n)级别。b站链接:https:/...原创 2018-08-02 18:41:23 · 188 阅读 · 0 评论 -
POJ 3764 The xor-longest Path 01字典树 树上最大异或和
题目链接http://poj.org/problem?id=3764题意给定一个N个结点、N-1条边的树。每个边上有一个权值。求树上路径权值的最大异或和。解题以零号结点为根进行一遍dfs处理出结点u到根节点的路径异或和。然后将这些异或和插入到01字典树中。最后遍历这些异或和查询与其异或最大的路径异或和。昨天写这题,怎么写怎么WA。今天起来重写一遍,怎么写怎么AC。真的迷啊。...原创 2018-08-07 10:01:33 · 436 阅读 · 0 评论 -
HDU 5412 CRB and Queries 分块 动态区间第k大
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=5412题意给定一个序列a[1..N],然后有M个操作。 1 x y:将第x个元素的值改为y 2 x y k:输出[x,y]的第k大元素解题不会主席树套树状数组。 用分块水一水。 维护块内有序。 对于查询区间第k大的话,二分答案key。如果key在区间[x,y]中有不少于k个元...原创 2018-08-06 21:26:54 · 319 阅读 · 0 评论 -
HDU1540 Tunnel Warfare (求包含第k位的最大连续区间)
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=1540题目During the War of Resistance Against Japan, tunnel warfare was carried out extensively in the vast areas of north China Plain. Generally speak...原创 2018-05-31 11:28:13 · 195 阅读 · 0 评论 -
HDU4027 Can you answer these queries? (伪区间修改、实单点修改、区间开平方根修改)
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=4027题目A lot of battleships of evil are arranged in a line before the battle. Our commander decides to use our secret weapon to eliminate the battles...原创 2018-05-30 17:39:30 · 291 阅读 · 0 评论