03 2018 档案
摘要:treap 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:插入x数,删除x数(若有多个相同的数,因只删除一个),查询x数的排名(排名定义为比当前数小的数的个数+1。若有多个相同的数,因输出最小的排名),查询排名为x的数,求x的前驱(前驱定义为小于x,且最大的数),求x的
阅读全文
摘要:luogup3834(主席树模板) 给定由N个正整数构成的序列,将对于指定的闭区间查询m次其区间内第k小值。1≤N,M≤2e5。 有一个做法,是对于每个序列的前缀建一颗权值线段树,然后通过权值线段树相减得到的权值线段树来查询第k小值。由于单点修改只需要改动logn个结点,第i个主席树可以依托第i 1
阅读全文
摘要:luogu1975 排队(分块) 给你一个长度为n的序列,每次交换给定的两个数,输出每次操作后的逆序对个数。 首先考虑求出刚开始的逆序对。接着相当于带修改的求区间中比x大的数。 可以用分块,每个块内排序,然后维护排序后的块。每次查询,块外二分,块内暴力。 c++ include include in
阅读全文
摘要:luogu4168蒲公英(区间众数) 给定n个数,m个区间询问,问每个询问中的众数是什么。 题面很漂亮,大家可以去看一下。 对于区间众数,由于区间的答案不能由子区间简单的找出来,所以似乎不能用树形结构。 用分块的话,设一个区间[x, y],里面包含的最大连续的块的左端点是l,右端点是r。那么显然,这
阅读全文
摘要:uva10570(枚举基准,贪心) 输入一个1至n的排列(n using namespace std; const int maxn=505, INF=1e9; int min(int x, int y){ return x 1); ++i) swap(a[i], a[n i+1]); for (i
阅读全文
摘要:最小度限制生成树 给定图G,求使得图中结点$V_0$的度不大于k的最小生成树。 设与v0相连的边集合是E0,|E0|=m,首先把v0去掉,对分裂后的每一个联通块都跑一遍最小生成树,得到边集合E1。一定存在一个方案,使得G的最小任意度限制生成树只用到E1中的和E0中的元素。证明在黑书p301,关键在于
阅读全文
摘要:最小生成树(prim和kruskal) 最小生成树的最优子结构性质 设一个最小生成树是T。如果选出一个T中的一条边,分裂成的两个树T1,T2依然是它们的点集组成的最小生成树。这个性质在关于生成树的状压dp里可以用。 prim算法 prim是在当前的最小生成树基础上,选择一条最短边作为新的最小生成树。
阅读全文
摘要:二进制数(dp,记忆化搜索) 给定k个 include include using namespace std; const int maxk=11, maxn=1e6+5; int k, n, a[maxk], vis[maxn]; struct node{ int x, len, pre, en
阅读全文
摘要:luogu3224 永无乡(动态开点,权值线段树合并) 永无乡包含 n 座岛,编号从 1 到 n ,每座岛都有自己的独一无二的重要度,按照重要度可以将这 n 座岛排名,名次用 1 到 n 来表示。某些岛之间由巨大的桥连接,通过桥可以从一个岛到达另一个岛。如果从岛 a 出发经过若干座(含 0 座)桥可
阅读全文
摘要:luogu 3806 【模板】点分治 给定一棵有n个点的树,有m个询问,每个询问树上距离为k的点对是否存在。树的权值最多不超过c。n include include include using namespace std; const int maxn=1e4+5; struct Graph{ st
阅读全文
摘要:poj 1741 Tree(树的点分治) 给出一个n个结点的树和一个整数k,问有多少个距离不超过k的点对。 首先对于一个树中的点对,要么经过根结点,要么不经过。所以我们可以把经过根节点的符合点对统计出来。接着对于每一个子树再次运算。如果不用点分治的技巧,时间复杂度可能退化成$O(n^2)$(链)。如
阅读全文
摘要:置换群(本蒟蒻瞎BB的)(未完) 群的定义 给定一个集合$G=\{a, b, c...\}$和集合$G$上的二元运算\ ,并满足: 1. 封闭性:$\forall a, b \in G, \exists c \in G, a b=c$。也就是集合里的元素怎么乱搞都只能搞出来集合里的东西。 2. 结合
阅读全文
摘要:uva 1153 顾客是上帝(贪心) 有n个工作,已知每个工作需要的时间q[i]和截止时间d[i](必须在此前完成),最多能完成多少个工作?工作只能串行完成,第一项任务开始的时间不早于时刻0. 这道题算比较难的贪心了。解法是维护一个关于所有选择的时间的大根堆。将所有工作按照截止时间排序(将二维问题转
阅读全文
摘要:关于区间的贪心问题 选择不相交区间 数轴上有n个开区间,选择尽量多个区间,使得这些区间两两没有公共点。 首先,若有两个区间x和y,区间x完全包含y,那么肯定不用选择x,因为选择y冲突更少,却和x的价值相同。 接下来,按照右端点从小到大给区间排序。有两个贪心策略:第一个是——一定要选择第一个区间,这是
阅读全文
摘要:uva 1615 高速公路(贪心,区间问题) 给定平面上n个点和一个值D,要求在x轴上选出尽量少的点,使得对于给定的每个点,都有一个选出的点离它的欧几里得距离不超过D。(n include include include using namespace std; const int maxn=1e5
阅读全文
摘要:uva 1614奇怪的股市(归纳法证明,贪心) 输入一个长度为n的序列a,满足$1\le a_i\le i$,要求确定每个数的正负号,使得所有数的总和为0.例如a={1, 2, 3, 4},则4个数的符号分别是1, 1, 1, 1即可。但若a={1, 2, 3, 3},则无解。n include u
阅读全文
摘要:常用算法设计和优化策略(本蒟蒻不定期更新) 下面是紫书上讲的常用算法设计策略和优化策略: 分治法:将问题分成相同的独立子问题求解。在普通的分治之外,还有一种cdq分治,思想是处理左边区间到右边区间的影响,归并算一个例子。 动态规划 第一种用法 本质是:对于一个问题,通过定义状态来 分解问题 。利用状
阅读全文

浙公网安备 33010602011771号