数据结构
多行不译必自闭
人生如逆旅,我亦是行人
展开
-
队列尺取法 -- F Groundhog Looking Dowdy
F Groundhog Looking Dowdy题意:有n天, 每天选一件衣服,有k件衣服可供选择,每件衣服都有个权值。在n天中有m天你要外出约会,求这m天中你衣服权值的极差(衣服权值的 (最大值 - 最小值))的最小值。思路:题意要求极差最小,这意味着m天衣服的权值间隙要尽可能的小,(比如最佳的情况是连续的),那我们就开个结构体数组,记录每件衣服的权值和所属日期。按衣服权值从小到大排序。依次将数据压道队列中,当刚好压到有m个不同日期的衣服时,把该天衣服的权值 - 队首第一个不同日期的最后一件衣服原创 2020-08-09 22:45:51 · 99 阅读 · 0 评论 -
树链剖分详解 -- P3384 【模板】轻重链剖分
洛谷P3384 【模板】轻重链剖分树链剖分详解转载 2020-08-05 18:41:06 · 138 阅读 · 0 评论 -
单调队列 -- F. Fake Maxpooling
F. Fake Maxpooling题意:给你一个n * m的矩阵, 矩阵值为 行号 i 、 列号 j的lcm(最小公倍数), 求这个n * m 矩阵所有 k * k 子矩阵中最大值的和。思路:单调队列求每行窗口k内的最大值,并记录到broad矩阵中, 在对broad矩阵每列用单调矩阵求一遍窗口k内的最大值, 把每个子矩阵的贡献加到起来就行了。单调矩阵是什么,详解在这里code:#include<bits/stdc++.h>using namespace std;const i原创 2020-07-14 15:10:09 · 223 阅读 · 0 评论 -
贪心 & 并查集压缩路径 -- Supermarket POJ - 1456
Supermarket POJ - 1456题意:是买卖N件东西,每件东西都有个截止时间,在截止时间之前买都可以,而每个单位时间只能买一件。问最大获利。思路:用贪心做,用并查集来加快速度,太精妙了。如果购买不冲突,那么全部买下来就可以了。存在冲突,就需要取舍。显然在冲突的时候我们选择价格高的更优,如此就可以用贪心的算法。先将物品按照价格从高到底的顺序排列,购买一个就在时间点上做一个标记,...原创 2020-02-17 10:02:50 · 100 阅读 · 0 评论 -
优先队列
2019暑期集训第一次校赛-C 构造B数组链接:https://ac.nowcoder.com/acm/contest/1068/C来源:牛客网题目描述给一个长度为n的数组a,现在要你构造一个长度为n的数组b,使得数组b的元素总和恰好为m且每个元素最小值不能小于0,且 最小,求出这个最小值输入描述:第一行输入两个数n,m (1 <= n, m <= 1e5)第二行输入...原创 2019-07-31 16:32:52 · 107 阅读 · 0 评论 -
差分数组
现在有数组a[7]int a[7];a[0]=1;a[1]=2;a[2]=4;a[3]=5;a[4]=12a[5]=34;a[6]=123;a[7]=3;如果要把a[0]-a[4]都加一,最朴素的方法就是a[0]++;a[1]++;a[2]++;a[3]++;a[4]++;时间复杂度为O(n)打字打着都很费力但是如果先有一个神奇的差分数组d[7],就可以省力...原创 2019-07-30 13:43:49 · 109 阅读 · 0 评论 -
单调栈 -- 求最值所在的区间
[2019暑期牛客多校第4场-C.sequense]在这里插入代码片(https://ac.nowcoder.com/acm/contest/884/C)code盗的许老师的代码#include<bits/stdc++.h>#define ll long longusing namespace std;const int maxn=3e6+10;int n, L[maxn...原创 2019-07-29 15:04:32 · 284 阅读 · 0 评论 -
单调栈的介绍以及一些基本性质
单调栈的定义:单调栈就是栈内元素单调递增或者单调递减的栈,单调栈只能在栈顶操作。为了更好的理解单调栈,则可将单调栈用生活情形模拟实现,例如:我们借用拿号排队的场景来说明下。现在有很多人在排队买可乐,每个人手里都拿着号,越靠前的人手里的号越小,但是号不一定是连续的。小明拿了号后并没有去排队,而是跑去约会了。等他回来后,发现队伍已经排得很长了,他不能直接插入到队伍里,不然人家以为他是来插队的...转载 2019-07-19 20:48:59 · 265 阅读 · 0 评论 -
单调栈去重-2019暑期集训牛客多校8-A. All-one Matrices
2019暑期集训牛客多校8-A. All-one Matrices思路给你一个n*m由0、1组成的矩阵,要你找出所有由1组成且不被另一个更大的矩阵(也全由1组成)完全包含的矩阵。并输出个数。最大子矩阵问题加去重,用h[i][j]存(i,j)位置上1的高度,单增栈找到每一行的每个点向左、向右所能到达的最远的位置存在L[i][j]、R[i][j]。接下来就是最大子矩阵问题了。再用单增栈去重。题...原创 2019-08-12 23:53:45 · 188 阅读 · 0 评论 -
栈 & 思维 -- 2019暑期集训牛客多校8-C.CDMA
2019暑期集训牛客多校8-C.CDMA思路给你一个nn的矩阵,n=2^k(k=1、2、3、…、10),矩阵由1和-1组成,且任意两行对应位置元素相乘再相加为0。要你输出这样的nn矩阵。显然n=2时矩阵可以为:1 11 -1而n=4时,矩阵为:1 1 1 11 -1 1 -11 1 -(1 1)1 -1 -(1 -1)由此发现n=2^k的矩阵...原创 2019-08-13 00:47:22 · 95 阅读 · 0 评论 -
栈 -- 删括号水题
2019暑期集训牛客多校8-G.Gemstones题解栈的简单应用,类似于删括号,碰到连续相同的三个元素就删掉并计数。题解#include<iostream>#include<string.h>#include<stack>#include<algorithm>using namespace std;const int MAXN=1...原创 2019-08-13 00:53:59 · 139 阅读 · 0 评论 -
用c++实现红黑树的插入、删除、遍历操作
红黑树是一棵二叉搜索树,它在每个节点上增加了一个存储位来表示节点的颜色,可以是Red或Black。通过对任何一条从根到叶子简单路径上的颜色来约束,红黑树保证最长路径不超过最短路径的两倍,因而近似于平衡。红黑树是满足下面红黑性质的二叉搜索树:每个节点,不是红色就是黑色的;根节点是黑色的;如果一个节点是红色的,则它的两个子节点是黑色的;对每个节点,从该节点到其所有后代叶节点的简单路径上,均...原创 2019-12-09 22:41:00 · 1224 阅读 · 0 评论 -
前缀和的妙用
2019暑期牛客多校第4场-K.numbercode#include<iostream>#include<string.h>using namespace std;const int MAXN=1e5+10;char s[MAXN];long long cot[4];int sum[MAXN];int main(){ memset(cot,0,siz...原创 2019-07-29 15:15:00 · 165 阅读 · 0 评论 -
树状数组
几个重要辅助函数int secondlowbit(int t) //找到小于t并最靠近t的2^n { //如secondlowbit(8)=4 secodlowbit(6)=4 secondlowbit(5)=4 int bit=1; while(bit<t) { bit<<=1; ...原创 2019-07-06 17:31:51 · 98 阅读 · 0 评论 -
RMQ(区间最值问题)详解
RMQ问题的三种解法首先说一下什么是RMQ问题:RMQ (Range Minimum/Maximum Query)问题是指:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A中下标在[i,j]里的最小(大)值,也就是说,RMQ问题是指求区间最值的问题主要方法及复杂度(处理复杂度和查询复杂度)如下:1.朴素(即搜索) O(n)-O(n)2.线段树(se...转载 2019-07-18 22:55:55 · 4182 阅读 · 0 评论