随笔分类 - 树状数组
摘要:hdu1 04 Ball(bitset) 把所有边升序排序后,枚举中间大小的边$e$ 考虑对每个点$i$记录所有$dis(i,j)\le e$的$j$构成的集合$S_i$ 在枚举到边$(u,v,w)$时,以该边为中位数的三角形答案为$S_i \cap \bar{S_j}$ 利用bitset容易维护
阅读全文
摘要:A 先构造出$1-8,16$这$9$个数,共需要$17$步 之后按照每四位一个单位构造数$x$,若$x$的末四位$\le 8$可以直接加,否则需要在之前$+1$然后减去一个$<8$的数 这样每一个$4$位最多用两步即可解决,一共最多$17+16\times2+1=50$步 (注意一直进位使得整个数多
阅读全文
摘要:这场好难 $dls$下手也太狠了 A 好奇怪的题 弃了 B 将每个点认为是边和列之间的边,容易发现题意即为求最小生成树 因为边权不会太大,桶排序后$kruskal$即可 #include<bits/stdc++.h> #define inf 2139062143 #define ll long lo
阅读全文
摘要:A 签到题,显然可以取到所有$<\lceil\frac{n}{2}\rceil$的所有数,则答案就是$n-1$的最高位$2^x-1$ #include<bits/stdc++.h> #define inf 2139062143 #define ll long long #define db doub
阅读全文
摘要:T1 luogu 5070 题目大意: 现在给你一个长度为$n$的序列,有$m$次询问 每次询问一个区间$[l,r]$排序去重后的序列中长度为1到10的条件的区间个数 满足条件的区间满足每项是前一项数+1的极长区间 思路: 发现每个数$x$只对$[x-10,x+10]$这个区间有影响 直接莫队维护一
阅读全文
摘要:T1 sort 题目大意: $n$个人,每个人有一个分,$m$对关系,表示两个人的分数关系,已知关系中每个人最多有一个人的分比他小 求满足条件的所有人的排名有多少种 思路: 容易发现若没有$=$号则使用组合数就可以非常简单的合并子树 若有两个等级数为$i,j$ 我们可以枚举最终的等级数$k$,设这样
阅读全文
摘要:几个有用的结论: 记狄利克雷卷积: $(f*g)(n)=\sum\limits_{d|n} f(d) * g(\frac{n}{d})$ 则有重要结论:$\mu * 1 = [n=1]$与$\varphi *1 = id$与$\mu * id=\varphi$ 若$F(n)=\sum\limits_
阅读全文
摘要:T1 bishop 题目大意: n个点组成了一些环 在这n个点中等概率选k个点(不能重复) 染了一个点就会染该环上的所有点 求所有点都被染色的概率 思路: 可以设$F_{i,j}$ 表示在$i$个环放$k$个点的方案数即$F_{i,j}=C(i,j)$,$if \space j==0 :F_{i,j
阅读全文
摘要:题目大意: 一个网格图上 有些点被染色了 求所有白点对答案的贡献 是指以这个白点为中心的十字架的数目 一个十字架可以看成中间是白点,墓地的正上、正下、正左、正右都有恰好k 棵黑点 思路: 先离线 对于每个点 对答案的贡献为C (正上黑点数,k) *C (正下黑点数,k) *C (正左黑点数,k) *
阅读全文
摘要:又是AK失败的一天 T1 小M的算式 题目大意: 一个数字组成的字符串 每两个字符间可以加入+或=或不加入符号(整个串只能加入一个=) 求这个字符串能否变成一个等式 思路: 爆搜 枚举一下等号出现位置 1 #include<iostream> 2 #include<cstdio> 3 #includ
阅读全文
摘要:题目大意: 维护一个W*W的矩阵,初始值均为S.每次操作可以增加某格子的权值,或询问某子矩阵的总权值. 思路: 把每个询问拆成四个点 然后按时间cdq分治 查询以每个点为右上角的矩形内 最大权值和 1 #include<iostream> 2 #include<cstdio> 3 #include<
阅读全文
摘要:题目大意: 在平面上,有 n 个水晶柱,每个水晶柱可以用一个点表示 如果 4 个水晶柱依次相连可以构成一个四边形,满足其两条对角线分别平行于 x 轴和 y 轴,并且对角线的交点位于四边形内部(不包括边界) 那么这 4 个水晶柱就可以建立一个结界 其中,对角线的交点称作这个结界的中心 例如下左图中,水
阅读全文
摘要:搞完了线段树专题 拿几道还比较有意义的题来写一下博客吧 还是先%棒神为好 ① 小白逛公园 bzoj 1756 题目大意: 一个序列 支持单点修改和区间内连续子段最大值 思路: 对于线段树上每一段维护四个东西 每一段从左起的最大值 从右起的最大值 这一段的sum 这一段的答案 然后合并的时候可以很容易
阅读全文
摘要:题目大意: 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数。给1到n的一个排列,按照某种顺序依次删除m个元素,你的任务是在每次删除一个元素之前统计整个序列的逆序对数 思路: 转化一下的三位偏序 下标的倒序定为x 数值定为y 删除的倒序为z 然后对于每个元素需要求三个都比
阅读全文
摘要:题目大意: 一些点,每次查询一个矩形内有多少个点 思路: 因为空间太大 所以不能用什么二维树状数组 需要把这些点和所有查询的矩阵的左下和右上离线下来 先离散化 然后每个子矩阵像二维前缀和那样查询 按照x升序加入点,对于矩阵的点查询 1 #include<iostream> 2 #include<cs
阅读全文
摘要:题目大意: 有 n个元素,第 i 个元素有 ai、bi、ci 三个属性,设 f(i) 表示满足 aj≤ai 且bj≤bi 且 cj≤ci 的 j 的数量 对于 d∈[0,n),求 f(i)=d 的数量 思路: cdq分治 先按照x排序记录一下顺序 然后cdq分治 在分治里面 先分治
阅读全文
摘要:题目大意: 两列数,可以交换每列中相邻的两个数,算作一次交换 求最小的交换次数使两列数相对应的数之差的平方之和最小 思路: 首先可以明确当两列数的排序位置相对应时,为最佳答案 然后我们按照一中排序后在二中排序后出现的位置建一个数组 求一下逆序对 1 #include<iostream> 2 #inc
阅读全文
摘要:题目大意: 有两条平行线,给出n条分别连接两条平行线上整点的线段 保证不会有重边且不会与两条以上边交于一个点的情况 思路: 画图可以得知,当且仅当两条线段在两条平行线上端点的大小关系相反时,才会相交 因此我们可以使用树状数组 按照第二条平行线上的位置升序排序 然后倒着查询之前有(即在它右边)几个比它
阅读全文
摘要:题目大意: 有一个01矩阵,求其所有a*b的子矩阵中总和最大的子矩阵的权值和 思路: 二维树状数组 n2log2n 虽然poj数据太弱了,二维前缀和就过了 好多天以后发现二位前缀和比树状数组快。。。 经过实验:一样快。。。 附两种代码 1 #include<iostream> 2 #include<
阅读全文
摘要:题目大意: 一个数列,求i,j,k,l,m满足: 1 ≤ i < j < k < l < m ≤ N 且 Ai < Aj < Ak < Al < Am 有几组不同的i,j,k,l,m 思路: 显而易见是:四个树状数组搞定 但是看了一眼数据量:(1 ≤ N ≤ 50000) ,每个数不超过109 这就
阅读全文

浙公网安备 33010602011771号