LOJ 看到离线区间操作仍然考虑莫队,然后可以发现:我们对于原来的凸包集合按照极角序维护一个链表,那么删除一个位置可以\(O(1)\),撤回删除操作也可以\(O(1)\)(因为原来的链表结构中当前节点就记录着其之前的前驱后继),但是动态加入操作至少要一个二分的\(log\)的复杂度.所以我们要尽可能避免动态加入. 因为没学过回滚莫队所以我的写法比较奇怪:设\(solve(l,r)\)表示正在解决左端点在块\(l\)内.右端点在块\(r\)内的询问,并且此时已经维护出块\(l\)左端点到块\(r\…
题面 传送门 题解 因为并不强制在线,我们可以考虑莫队 然而莫队的时候有个问题,删除很简单,除去它和前驱后继的贡献即可.但是插入的话却要找到前驱后继再插入,非常麻烦 那么我们把它变成只删除的回滚莫队就好了 不知道回滚莫队的可以看看这里 //minamoto #include<bits/stdc++.h> #define R register #define ll long long #define inline __attribute__((always_inline)) #define fp…
Loj #6503. 「雅礼集训 2018 Day4」Magic 题目描述 前进!前进!不择手段地前进!--托马斯 · 维德 魔法纪元元年. 1453 年 5 月 3 日 16 时,高维碎片接触地球. 1453 年 5 月 28 日 21 时,碎片完全离开地球. 1453 年,君士坦丁堡被围城,迪奥娜拉接触到四维泡沫空间,成为魔法师,最终因高维碎片消失失去魔力而身死. 为了改写这段历史,你不惜耗费你珍藏已久的魔术卡来回到魔法纪元元年. 在使用这些魔术卡之前,你却对它们的排列起了兴趣... 桌面上…
神仙题 LOJ #6509 题意 给定一棵树,点权为0/1,每次随机一个点(可能和之前所在点相同)走到该点并将其点权异或上1 求期望的移动距离使得所有点点权相同 题解 根本不会解方程 容易发现如果一个点不是最后一次被走到,就会随机下一个点并走过去 即如果我们能求出每个点非最后一次走到的期望次数,就可以算出答案 由于完全随机,初始相同颜色的点非最后一次走到的次数相同 设$ f_{i,0/1}$表示在有$ i$个1的时候,0/1非最后一次走到的期望次数 很艰难的列出方程如下 $$ f_{i,0} =…
题意 题目链接 分析 注意到本题的 \(C\) 很小,考虑定义一个和 \(C\) 有关的状态. 记 \(f(x,j)\) 表示考虑到了价格为 \(x\) 的物品,一共花费了 \(j\) 元的最大收益.将价格为 \(x\) 的物品按照收益从大到小排序,记这个数组为 \(w\) ,不难发现我们选择的一定是 \(w\) 的一段前缀的形式. 将所有的 \(j\) 按照模 \(x\) 的余数分类,容易得到: \(f(x,i)=\max\limits_{j\%x=i\%x}\{f(x-1,j)+w(\fra…
题意 \(n\) 张卡牌 \(m\) 种颜色,询问有多少种本质不同的序列满足相邻颜色相同的位置数量等于 \(k\). 分析 首先本质不同不好直接处理,可以将同种颜色的卡牌看作是不相同的,求出答案后除以 \(\prod {a_i!}\) 即可. 如果我们能够得到一个至少存在 \(k\) 个魔术对的排列数,就可以容斥了. 考虑单独处理每种颜色, 枚举一个颜色 \(i\),计算这种颜色至少有 \(j\) 对的方案总数. 可以选择 \(j\) 张牌保证这些牌一定跟在某张牌的后面,这样就可以形成 \(\g…
题面 传送门 题解 要不是因为数组版的\(LCT\)跑得实在太慢我至于去学指针版的么--而且指针版的完全看不懂啊-- 首先有两个结论 1.与一个点距离最大的点为任意一条直径的两个端点之一 2.两棵树之间连一条边新树直径的端点一定是第一棵树直径的两个端点和第二颗树直径的两个端点这四个点之二 然后用并查集维护联通块的直径就行了.注意因为这里强制在线,所以得用\(LCT\)来维护距离 并不建议看代码因为这个代码非常难懂哪怕我加满注释您都不一定看得懂 //minamoto #include<bits/s…
题目描述 Miranda 生活的城市有 \(N\) 个小镇,一开始小镇间没有任何道路连接.随着经济发现,小镇之间陆续建起了一些双向的道路但是由于经济不太发达,在建设过程中,会保证对于任意两个小镇,最多有一条路径能互相到达.有的时候 Miranda 会从某个小镇开始进行徒步旅行,每次出发前,她都想选择一个她能到达的最远的小镇作为终点,并且她在行走过程中是不会走回头路的,为了估算这次旅行的时间,她会需要你告诉她这次旅行的时间会是多少呢?可以假设通过每条道路都需要单位时间,并且 Miranda 不会在…
\(\color{#0066ff}{输入样例}\) 0 11 10 QU 0 0 QU 1 9 IG 14 7 IF 3 5 QU 0 9 IG 1 8 DF QU 0 4 IF 1 2 DG QU 2 9 \(\color{#0066ff}{输出样例}\) 0 -1 12 8 9 \(\color{#0066ff}{数据范围与提示}\) \(\color{#0066ff}{题解}\) 维护两个栈,一个是前面插入,一个是后面插入,每次插入的时候跑一遍背包 删除的时候,如果一个栈空了,那么把另一个…
题面 传送门 题解 我的线代学得跟屎一样看题解跟看天书一样所以不要指望这题我会写题解 这里 //minamoto #include<bits/stdc++.h> #define R register #define fp(i,a,b) for(R int i=a,I=b+1;i<I;++i) #define fd(i,a,b) for(R int i=a,I=b-1;i>I;--i) #define go(u) for(int i=head[u],v=e[i].v;i;i=e[i]…