随笔分类 -  I-数据结构==================

摘要:Link: 传送门 Solution: 以前没见过的套路题…… 1、使用EXT欧拉定理降幂的套路: $a^{x}=a^{xmod\phi(P)+\phi(P)} mod P$,且$x\ge P$ 这样对于$c^{c^{c^x}}modP$就能递推/递归得套用上述定理计算,每层模数多套一层$\phi$ 阅读全文
posted @ 2018-11-23 17:41 NewErA 阅读(256) 评论(0) 推荐(0)
摘要:Link: BZOJ 3720 传送门 Solution: 由于强制在线+新添节点,主席树难以进行更新 这时考虑在树上分块,具体内部的操作和在序列上相同 每次通过判断父节点块的大小判断是否要新开一块 注意每一块在树上都是连续的,这样在查询时子树时保证最后全是整块 不过由于上一条特性导致遇到菊花图就将 阅读全文
posted @ 2018-09-28 13:37 NewErA 阅读(212) 评论(0) 推荐(0)
摘要:Link: BZOJ 4071传送门 Solution: 首先算出能提前算的贡献 $K=1$:肯定选中间的点,小学数学 $K=2$:对于每对$(x,y)$一定选离$(x+y)/2$近的桥 也就是说将$(x,y)$按$(x+y)/2$的值排序后一定恰有一个分割点使得两边选择不同的桥! 考虑如何如何快速 阅读全文
posted @ 2018-09-28 11:31 NewErA 阅读(206) 评论(0) 推荐(0)
摘要:Link: BZOJ 2821 传送门 Solution: 一道类似区间众数的经典分块 由于个数为偶数这样的条件不能支持快速合并 因此要先$O(n*sqrt(n))$预处理出$pre[i][j]$表示第$i$块到第$j$块的答案 同时要建立每种颜色的有序序列方便求出一个区间内某种颜色的个数 这样每次 阅读全文
posted @ 2018-09-28 11:09 NewErA 阅读(142) 评论(0) 推荐(0)
摘要:Link: P3396 传送门 Solution: 其实就是要求$\sum a[k*x+y]$ 按$x$分类处理: 1、如果$x>sqrt(n)$,那么$k<sqrt(n)$直接暴力 2、如果$x<sqrt(n)$,$O(n*sqrt(n))$预处理,$O(sqrt(n))$修改 这是一道论文题,体 阅读全文
posted @ 2018-09-26 10:58 NewErA 阅读(144) 评论(0) 推荐(0)
摘要:Link: Codeforces 1053C 传送门 Solution: 先推出一个结论: 最后必有一个点不动且其为权值上最中间的一个点 证明用反证证出如果不在中间的点必有一段能用代价少的替代多的 这样问题转换为求出区间第一个大于权值和一半的点,并求结果 如果只考虑半边的结果为$\sum_{i=1} 阅读全文
posted @ 2018-09-26 10:42 NewErA 阅读(385) 评论(2) 推荐(0)
摘要:Link: 传送门 A: 套路题结果想了好久…… 排序二叉树的性质就是中序遍历单调递增 于是只考虑当前树的中序遍历的序列即可,与树的形态无关 将序列改成严格单调增想到最大化不变的数,但直接LIS求的是改为非严格单调增的数 一个将严格单调增问题改为非严格的套路是将数$a_i$替换成$a_i-i$,对转 阅读全文
posted @ 2018-09-18 15:39 NewErA 阅读(260) 评论(0) 推荐(0)
摘要:Link: 传送门 可能要补一补之前的题了 题目名字天(Sky)的(De)炭(C)好评啊…… A: 从买/卖物品的配对来考虑: 可以发现如果当前物品为卖,肯定从之前选最小的(无论其为买/卖),因为贡献都是差值! 如果要买的物品当前状态为卖,那么相当于将那条匹配链的卖的那一端转换 用优先队列维护$pa 阅读全文
posted @ 2018-09-18 10:55 NewErA 阅读(240) 评论(2) 推荐(0)
摘要:Link: 传送门 A: 由于每个颜色只染色一次就确定了所有要染色的区间 要求染色的次数其实就是求区间最多嵌套多少层,如果有区间相交则无解 以上操作明显可以将左端点排序后用栈来维护 #include <bits/stdc++.h> using namespace std; #define X fir 阅读全文
posted @ 2018-09-13 09:46 NewErA 阅读(202) 评论(0) 推荐(0)
摘要:Link: 传送门 A: 分层图最短路(其实就是最短路转移时多记录一维的数据 #include <bits/stdc++.h> using namespace std; #define X first #define Y second typedef double db; typedef long 阅读全文
posted @ 2018-09-13 09:28 NewErA 阅读(253) 评论(0) 推荐(0)
摘要:Link: 传送门 A: 按值大小插入后用树状数组统计两边个数 #include <bits/stdc++.h> using namespace std; #define X first #define Y second #define pb push_back typedef double db; 阅读全文
posted @ 2018-09-13 09:13 NewErA 阅读(204) 评论(0) 推荐(0)
摘要:Link: BZOJ 1208 传送门 Solution: 求前驱后继,很明显的平衡树操作 其实$set$完全可以做,主要是为了复习下$Treap$结果调了好久…… 注意:在写平衡树删除时一定要记得考虑删除数不存在的情况 特别是$Treap$,如果访问到空要直接返回否则死循环…… Code: 阅读全文
posted @ 2018-09-13 09:13 NewErA 阅读(199) 评论(0) 推荐(0)
摘要:Link: BZOJ 1500 传送门 Solution: 可能平衡树维护序列的所有操作都在这了吧…… 对序列的维护$fhq treap$和$Splay$都能做 有几个注意点: 1、维护序列时始终记得第$k$大指的是序号,与权值无关 2、注意对0的初始化,毕竟如果无叶子结点时会用到 3、如果数据总量 阅读全文
posted @ 2018-09-13 09:13 NewErA 阅读(361) 评论(0) 推荐(0)
摘要:Link: 传送门 A: 对于每一条分割线,设本不应在其左侧的个数为$x$ 重点要发现每次一来一回的操作恰好会将一对分别应在左/右侧的一个数从右/左移过去 这样就转直接用树状数组求出最大的$x$即可 #include <bits/stdc++.h> using namespace std; #def 阅读全文
posted @ 2018-09-09 20:40 NewErA 阅读(247) 评论(0) 推荐(0)
摘要:Link: Codeforces #172 传送门 A: 一眼看上去分两类就可以了 1、每个矩形只有两条边相交,重合的形状为菱形 2、每个矩形四条边都有相交 对于情况1答案为$h*h/sin(a)$ 对于情况2可以列出一个二元一次方程组,手动解一下就好了 不过计算几何确实容易写挂啊…… 有几个注意点 阅读全文
posted @ 2018-08-25 16:54 NewErA 阅读(280) 评论(0) 推荐(0)
摘要:Link: BZOJ 3196 传送门 Solution: 最直观的的思路是用线段树套平衡树 不过一看到区间第$k$大就又忍不住去写最近刚练的带修改主席树了 感觉自己数据结构题灵活变通的能力还不够强啊,一开始$naive$得觉得不好算排名…… 区间第$k$大和修改的操作和$Dynamic Ranki 阅读全文
posted @ 2018-07-25 22:36 NewErA 阅读(170) 评论(0) 推荐(0)
摘要:Link: BZOJ 1058 传送门 Solution: 为了这道题今天下午一直都在和常数大战…… 1、对于询问1,我们记录每个数末位置的数$T[i]$和初始位置$S[i]$ 用平衡树维护所有差值,对于操作$i,k$:删除$S[i+1]-T[i]$,增加$x-T[i]$和$x-S[i+1]$ 2、 阅读全文
posted @ 2018-07-25 22:24 NewErA 阅读(170) 评论(0) 推荐(0)
摘要:Link: BZOJ 1878 传送门 Solution: 很久以前这道题我是用$BIT$过的 思路非常简单:离线将询问排序,记录每个点同一颜色的后继节点 随着询问左边界的递增,将处于两次左边界间的节点从$BIT$中删去,而加入其后继节点的位置 接下来统计处于$[l,r]$间的数的个数就好了 同时这 阅读全文
posted @ 2018-07-24 22:45 NewErA 阅读(156) 评论(0) 推荐(0)
摘要:Link: BZOJ 3932 传送门 Solution: 一道比较基础的数据结构题吧,然而一开始我想的还是两个$log$…… 明显看出我们是要对每一个时刻$x$维护各个权值区间内数的个数及数的和,主席树的经典模型 在一开始建树时可以使用前缀数组差分的方式: 对于任务$(l,r,x)$,修改$<l, 阅读全文
posted @ 2018-07-24 22:14 NewErA 阅读(173) 评论(0) 推荐(0)
摘要:Link: BZOJ 3123 传送门 Solution: 主席树+启发式合并 以前好像做的主席树都是在序列上的……在树上的主席树这样处理: 每个节点的主席树维护其到根节点的路径上的值,以其父节点为模板构造 那么为了取出$(u,v)$路径上的值用$seg[x]+seg[y]-seg[lca]-seg 阅读全文
posted @ 2018-07-23 22:36 NewErA 阅读(180) 评论(0) 推荐(0)