09 2018 档案

摘要:Link: BZOJ 4719 传送门 Solution: 感觉求LCA又有了新姿势啊:$Tarjan$离线$O(n+m)$ 每次递归返回时将子树和父节点合并,如果询问节点已访问过则LCA就是已合并的最高节点 这题部分分提示非常多啊 首先要将路径拆为$(S,LCA),(LCA,T)$ 发现如果$(S 阅读全文
posted @ 2018-09-28 14:09 NewErA 阅读(146) 评论(0) 推荐(0)
摘要:Link: BZOJ 3720 传送门 Solution: 由于强制在线+新添节点,主席树难以进行更新 这时考虑在树上分块,具体内部的操作和在序列上相同 每次通过判断父节点块的大小判断是否要新开一块 注意每一块在树上都是连续的,这样在查询时子树时保证最后全是整块 不过由于上一条特性导致遇到菊花图就将 阅读全文
posted @ 2018-09-28 13:37 NewErA 阅读(211) 评论(0) 推荐(0)
摘要:Link: BZOJ 3707 传送门 Solution: 很不错的一道思维题 可以发现枚举完两点后最优点就是最接近该直线的点 如果将该直线看作$y$轴用两边$x$坐标的绝对值最小的点更新即可 于是可以将所有斜率排序后不断旋转$y$轴并维护当前按$x$从小到大的序列 发现对于直线$(x,y)$,两点 阅读全文
posted @ 2018-09-28 13:25 NewErA 阅读(187) 评论(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 阅读(200) 评论(0) 推荐(0)
摘要:Link: BZOJ 2821 传送门 Solution: 一道类似区间众数的经典分块 由于个数为偶数这样的条件不能支持快速合并 因此要先$O(n*sqrt(n))$预处理出$pre[i][j]$表示第$i$块到第$j$块的答案 同时要建立每种颜色的有序序列方便求出一个区间内某种颜色的个数 这样每次 阅读全文
posted @ 2018-09-28 11:09 NewErA 阅读(136) 评论(0) 推荐(0)
摘要:Link: P1084 传送门 Solution: 感觉NOIP T3也是有点东西的…… 将该题转化为最大值最小问题后想到二分答案 接下来考虑$check$时如何贪心: 由于除了在根节点所有军队都只往上跳明显采取倍增的方式 记录所有能到达根节点的军队和根节点下所有未被封死的子树 将两个序列从小到大排 阅读全文
posted @ 2018-09-28 10:46 NewErA 阅读(241) 评论(0) 推荐(0)
摘要:Link: BZOJ 2243 传送门 Solution: 基础树剖,但要注意的就是链合并时的边界问题 每次查询时发现当前区间为目标区间的边界时直接记录边界的值即可 注意最后一次两个边界都要考虑! Code: 阅读全文
posted @ 2018-09-26 11:04 NewErA 阅读(140) 评论(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 阅读(143) 评论(0) 推荐(0)
摘要:Link: Codeforces 1053C 传送门 Solution: 先推出一个结论: 最后必有一个点不动且其为权值上最中间的一个点 证明用反证证出如果不在中间的点必有一段能用代价少的替代多的 这样问题转换为求出区间第一个大于权值和一半的点,并求结果 如果只考虑半边的结果为$\sum_{i=1} 阅读全文
posted @ 2018-09-26 10:42 NewErA 阅读(382) 评论(2) 推荐(0)
摘要:Link: Codeforces 1053B 传送门 Solution: 其实就是暴力 观察需要满足的条件: 1、个数和为偶数 2、最大个数不大于其它所有个数的和 如果只有第一个条件记录前缀和的奇偶性即可,接下来考虑去除不符合第二个条件的区间 由于一个数最大有60个1且每个数至少有1个1,因此只要暴 阅读全文
posted @ 2018-09-26 10:24 NewErA 阅读(440) 评论(0) 推荐(0)
摘要:Link: 传送门 A: 套路题结果想了好久…… 排序二叉树的性质就是中序遍历单调递增 于是只考虑当前树的中序遍历的序列即可,与树的形态无关 将序列改成严格单调增想到最大化不变的数,但直接LIS求的是改为非严格单调增的数 一个将严格单调增问题改为非严格的套路是将数$a_i$替换成$a_i-i$,对转 阅读全文
posted @ 2018-09-18 15:39 NewErA 阅读(257) 评论(0) 推荐(0)
摘要:Link: 传送门 可能要补一补之前的题了 题目名字天(Sky)的(De)炭(C)好评啊…… A: 从买/卖物品的配对来考虑: 可以发现如果当前物品为卖,肯定从之前选最小的(无论其为买/卖),因为贡献都是差值! 如果要买的物品当前状态为卖,那么相当于将那条匹配链的卖的那一端转换 用优先队列维护$pa 阅读全文
posted @ 2018-09-18 10:55 NewErA 阅读(236) 评论(2) 推荐(0)
摘要:Link: 传送门 A: 由于每个颜色只染色一次就确定了所有要染色的区间 要求染色的次数其实就是求区间最多嵌套多少层,如果有区间相交则无解 以上操作明显可以将左端点排序后用栈来维护 #include <bits/stdc++.h> using namespace std; #define X fir 阅读全文
posted @ 2018-09-13 09:46 NewErA 阅读(201) 评论(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 阅读(252) 评论(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: BZOJ 1208 传送门 Solution: 求前驱后继,很明显的平衡树操作 其实$set$完全可以做,主要是为了复习下$Treap$结果调了好久…… 注意:在写平衡树删除时一定要记得考虑删除数不存在的情况 特别是$Treap$,如果访问到空要直接返回否则死循环…… Code: 阅读全文
posted @ 2018-09-13 09:13 NewErA 阅读(197) 评论(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 阅读(203) 评论(0) 推荐(0)
摘要:Link: 传送门 A: 贪心从小到大插入,用并查集维护连通性 #include <bits/stdc++.h> using namespace std; #define X first #define Y second typedef double db; typedef long long ll 阅读全文
posted @ 2018-09-09 22:25 NewErA 阅读(221) 评论(0) 推荐(0)
摘要:Link: 传送门 A: 对于每一条分割线,设本不应在其左侧的个数为$x$ 重点要发现每次一来一回的操作恰好会将一对分别应在左/右侧的一个数从右/左移过去 这样就转直接用树状数组求出最大的$x$即可 #include <bits/stdc++.h> using namespace std; #def 阅读全文
posted @ 2018-09-09 20:40 NewErA 阅读(244) 评论(0) 推荐(0)
摘要:Link: USACO 2018 Feb Gold 传送门 A: $dp[i][j][k]$表示前$i$个中有$j$个0且末位为$k$的最优解 状态数$O(n^3)$ #include <bits/stdc++.h> using namespace std; #define X first #def 阅读全文
posted @ 2018-09-07 10:07 NewErA 阅读(195) 评论(0) 推荐(0)
摘要:Link: BZOJ 1070 传送门 Solution: 关键难处在于后加入的车的等待时间受到前面加入车的影响 但将式子同类项合并后发现:$W=n*a_1+(n-1)*a_2...+a_n$ 这样就可以将原来的一个人拆成$n$个人,分别表示处理倒数第$i$个车的决策,代价为$i*w$ 这样每个车就 阅读全文
posted @ 2018-09-04 14:12 NewErA 阅读(205) 评论(0) 推荐(0)
摘要:Link: BZOJ 2668 传送门 Solution: 重点在于对于每条转移路径:首尾算一次,中间节点算两次 可以一点拆三点,将原流量拆成入流量和出流量 但其实也可以就拆两点,分前后是否是一首尾点一普通点来确定是否有一条路径只占用1流量 Code: 阅读全文
posted @ 2018-09-04 13:53 NewErA 阅读(213) 评论(0) 推荐(0)
摘要:Link: BZOJ 1007 传送门 Solution: 维护一次函数凸壳模板 退栈条件为:$top$与$top-1$的交点在$top$与$i$的交点之后 Code: 阅读全文
posted @ 2018-09-04 13:46 NewErA 阅读(154) 评论(0) 推荐(0)
摘要:Link: BZOJ 1857 传送门 Solution: 首先中间的两个拐点$C,D$肯定都在传送带$A,B$上 接下来感性发现固定点A/C,另一个点C/D时间随位置的变化为单峰函数 这样就是三分套三分了 严谨的证明还不会啊…… 目前好像只能推出仅有一个零点,不过不太会证单调性啊…… Code: 阅读全文
posted @ 2018-09-04 13:35 NewErA 阅读(158) 评论(0) 推荐(0)
摘要:Link: USACO 2018 Jan Gold 传送门 A: 对于不同的$k$,发现限制就是小于$k$的边不能走 那么此时的答案就是由大于等于$k$的边形成的图中$v$所在的连通块除去$v$的大小 为了优化建图过程,考虑离线,将询问和边都按权值从大到小排序,依次加边即可 维护连通性和连通块大小用 阅读全文
posted @ 2018-09-04 11:14 NewErA 阅读(257) 评论(0) 推荐(0)
摘要:今天才知道$lower\_bound$最后有一个优先级参数…… 首先$lower\_bound$中的优先级和序列优先级必须相同才有效 $lower\_bound$中优先级默认的是小于号,也就是说仅当序列从小到大排序时才有效 可以选择重载小括号/小于号,或者直接写$bool$函数 如果是结构体写法调用 阅读全文
posted @ 2018-09-04 10:41 NewErA 阅读(965) 评论(0) 推荐(0)
摘要:Link: USACO 2017 Dec Gold 传送门 A: 为了保证复杂度明显是从终结点往回退 结果一开始全在想优化建边$dfs$……其实可以不用建边直接$multiset$找可行边跑$bfs$就行了 由于保证每个点只进队列一次、被搜索到一次,因此复杂度为$O(n*log(n))$ #incl 阅读全文
posted @ 2018-09-04 09:19 NewErA 阅读(178) 评论(0) 推荐(0)