![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
HDU 多校
杭电多校题目
lushanlushan0026
退役acmer,准研究生
展开
-
HDU Tokitsukaze and Colorful Tree 离线+树状数组
因为是求异或值 显然我们需要将val进行二进制拆分 每一位单独去看 由求和式子我们知道 计算点对(u,v)的贡献时 v不能在u的子树中 v不能在 u到根结点的路径上由于修改都是单点修改 我们可以用树状数组进行差分操作具体的算法步骤就是:对于每一个颜色 我们枚举20位按照操作 顺序 我们将初始值视为一次加操作 将一次修改操作视为一次减操作和一次加操作计算将要修改的点的每一位的贡献 (用总的减去在子树中的 再减去在根结点到当前点的路径上的 即为满足条件的)然...原创 2020-07-31 18:31:20 · 155 阅读 · 0 评论 -
HDU 6798 Triangle Collision 镜像原理+坐标轴旋转
这道题比较考思维吧 首先 在三角形内部的反射 去求反射角比较麻烦 时间上也不允许 我们要利用反射的原理 把这个平面衍生成一个由正三角形 镶嵌构成的平面 那第k次碰撞就是 由这个球的坐标 及其速度 构成的射线 与平面内等边三角形的第k次相交 其他博客图很多 可以去看看然后 我们二分一个时间 看这个时间 与整个平面有几个交点首先看 和x轴平行的线 容易得出 交点个数为 floor的意思是 取小于等于当前小数的最大整数另外两种 我们可以将坐标点 分别绕 等边三角形的中...原创 2020-07-29 19:49:39 · 246 阅读 · 0 评论 -
HDU 2020多校 6756 Finding a MEX 简单树分块
我主要是按题解思路写的我们发现修改和询问两个操作都和点的度直接相关,直接修改或者询问的话复杂度无法保证(菊花图 度接近n) 那我们得想办法进行一个分类讨论我们设置大点和小点。设置一个临界值为sqn 其值为根号n如果一个点的度大于等于根号n 那么我们把它分为大点否则我们把它分为小点首先我们用树状数组维护mex(对每个点开一个树状数组) 并且 将所有的点和与它相连的大点构成另外一个大点图 (在这个图中 对于点u来说 和它相连的都是大点)对于修改操作 如果当前点是小点 我们...原创 2020-07-25 10:52:34 · 146 阅读 · 0 评论 -
HDU 6305 笛卡尔树+求期望
首先这个题要分析不少东西:B数组是取0~1内的实数 任意两个元素相等的概率为0 所以我们可以认为 B数组的每个元素都不相等 可以看作全排列 对于合法序列B 其元素的期望值为1/2 (0~1上的均匀分布) 所以序列的期望值为 n/2 A和B满足题目条件 当且仅当 A和B的笛卡尔树同构 而全排列总共有种 其中满足同构的有 所以同构的概率为 综上所述 最终的答案为#include<bits/stdc++.h>using namespace std...原创 2020-07-10 21:03:53 · 324 阅读 · 0 评论 -
Ascending Rating HDU - 6319 单调队列
这题把题目一读完就有滑动窗口那味了 当时就想这绝*是单调队列 但是想了好久 不知道怎么维护cnt 后来队友给了个反正来的思路 我发现确实可以先把n个数求出来 然后从后往前 维护一个单调递减的单调队列 当我们遍历的个数>=m时 单调队列的元素个数就是 cnt 队首就是mx 有点卡时间 最好加个快读#include<bits/stdc++.h>using namespace std;const int N = 1e7+10;typedef long lo...原创 2020-07-10 09:55:59 · 124 阅读 · 0 评论 -
HDU - 6609 权值线段树
HDU - 6609给一个序列 a 对于每个i 询问最少删除几个数ai(i<ai) 能使得i位置的前缀和小于等于m表述可能不清楚 大家可以自己看题我们将题意转换一下 最少需要删几个数 那这几个数肯定是越大越好 并且 这几个数的和(其中sumi是i位置的前缀和) 那我们先把ai离散化了 然后遍历一次ai数组 每次向权值线段树中插入ai(当然是插入在ai离散化后排名的位置) 分别记录cnt和sum cnt是每个数出现的次数 sum是求和 然后我们在线段树中搜索 如...原创 2020-07-07 15:19:29 · 128 阅读 · 0 评论 -
HDU-6602 杭电多校 线段树
题目链接:hdu 6602博客思路源自博客:https://blog.nowcoder.net/n/bdacd5d54bdc491ea71ece169c860f39感觉多校的题目还是比较重思维 而饿我的思维很菜这题我一开始想了个假算法,因为要个数>=k或者==0,一开始我想着用主席树,先二分一个长度len,再去枚举左端点,假设枚举到了左端点为L 那么右端点R=L+len-...原创 2020-04-28 16:51:18 · 176 阅读 · 0 评论 -
HDU - 6601 Keen On Everything But Triangle 数论+主席树
题目:hdu 6601这个题其实是个很裸的主席树,关键是在复杂度分析。首先,如果对于一个区间的所有值,我们想去选一个最大周长三角形该怎么选? 因为三角形的周长要最大,我们先把值从大到小排序。用Ki表示第 i 大的边,选出K1,K2,K3,如果K1<K2+K3的话,就能构成三角形且周长最大(K1+K2<K3,K1+K3<K2 必然成立) 如果不能构成三角形,我们思考一下...原创 2020-04-28 08:21:59 · 300 阅读 · 1 评论 -
HDU - 6610 Nim博弈+带修莫队
可以看出来两人的游戏是nim博弈 所以如果区间内的数异或和不为0 那么Alice 必胜简单分析一下我们肯定要做一个前缀异或 然后再莫队就行 因为Bob会对序列进行修改 所以我们需要用带修莫队 然后就变成一个板子题目了带修莫队 在块大小为 n^(2/3) 理论上复杂度最优#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int N ...原创 2020-07-04 11:23:38 · 278 阅读 · 0 评论 -
HDU - 4902 Nice boat 线段树维护最大最小值
题意:1操作让区间l~r的值为x 2操作让区间大于x的值为gcd(x,ai)我们维护区间最大值最小值 当最大值等于最小值时 区间的数都相同 这样可以减少2操作的时间 另外 对于mx[id]<=x的区间我们不必要在更新 也可以剪掉#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int N = 1e5+10;int a[N],ans[N];.原创 2020-05-22 15:10:07 · 236 阅读 · 0 评论 -
HDU多校 - 5316 Magician 线段树
更新的操作很简单 关键是0操作怎么做 我们要求一个子序列的最大和 这个子序列满足每两个相邻的项在原数组中的下标都是奇偶相交的那么肯定有4种情况(用o表示奇,e表示偶):oo,ee,oe,eo用线段树去维护这四种就行啦 注意初值应该是负无穷而不是0#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int N = 1e5+10;int a[N..原创 2020-05-22 13:27:07 · 220 阅读 · 0 评论 -
HDU - 5790 Prefix 求区间不同种数的变形
我们先看一个简单的问题 给你一个数组 q次询问 每个询问 给l和r 问区间l到r有多少种不同的数这个可以离线树状数组 ,离线线段树,还可以莫队 但是现在我要你在线解决那么就只能用主席树了 还是那个套路 我们建立第0棵树 然后在0棵树的基础上建立第一颗树 然后在第一棵树的基础上建立第2棵树。。。以此类推 如果我们在建立第i棵树时 发现val[i]在前面已经出现了 我们记录这个位置 然后在第i棵树里面 让这个位置-1 然后在i位置+1 这样对于询问l,r 我们查询第r棵树里面 ...原创 2020-05-22 09:46:41 · 1069 阅读 · 0 评论 -
HDU - 5788 Level Up 主席树+树状数组
我们先说明几个结论:一个人的能力变化只会影响自己和上司 当变化的下属的能力小于等于上司的中位数 那么这个中位数会向后移动一位 否则不变 (这个画图就能体会到)所以我们需要用主席树去查询 第mid个能力值 和 第mid+1个能力值 用树状数组去维护差值 枚举每一个点 并记录可以获得的最大差值 最后答案就是初始的能力值之和+最大差值 具体可以看代码解释#include<cstdio>#include<cstring>#include<algorithm>.原创 2020-05-21 19:56:54 · 310 阅读 · 0 评论 -
HDU 4348 主席树的区间更新(另类的lazy标记)
个人觉得主席树无法像普通线段树那样更新是因为 主席树很多结点都是共用的 假如在某个结点我们把lazy标记pushdown了 那么它可能会更新其他时间点的树 这样我们访问其他时间点的树的时候 会得到错误的答案所以另类的更新是 我们不把lazy标记pushdown 而是在query操作的时候沿途累加lazy标记 当到达的区间在访问区间内时 返回当前结点的值+区间长度*累加的lazy另...原创 2020-05-06 15:57:00 · 986 阅读 · 0 评论