LOJ 莫队.发现只需要维护前驱后继就可以了. 但是加入一个点需要找到它当前的前驱后继,很麻烦还带个\(\log\). 但是如果只有删除某个点,只需要更新一下它的前驱后继即可. 用回滚莫队就好惹. 撤销,即重新加入点时,按顺序把每个点的前驱后继改回来即可. 不需要求斜率=-= atan2(y,x):返回点\((x,y)\)与\(x\)轴正半轴的夹角. //6527ms 8292K #include <cmath> #include <cstdio> #include <cct…
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…
正题 题目链接:https://loj.ac/p/6503 题目大意 \(n\)张卡\(m\)种,第\(i\)种卡有\(a_i\)张,求所有排列中有\(k\)对相邻且相同的卡牌. \(1\leq n\leq 10^5,0\leq k\leq 10^5,1\leq m\leq 20000,\sum_{i=1}^ma_i=n\) 解题思路 \(k\)对相邻的相同,就是可以分成有\(n-k\)组相同的. 考虑这个问题,把每组牌分成若干组插到不同位置,先不考虑这样可能插到相邻位置的情况我们后面可以再用容…
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} =…
Prelude 快要THUWC了,练一练板子. 传送到LOJ:o(TヘTo) Solution 首先有一条定理. 到树中任意一点的最远点一定是直径的两个端点之一. 我也不会证反正大家都在用,似乎可以用反证法搞一搞? 然后就是LCT和并查集随便做了. 对于每个连通块,只需要保存这个连通块的直径的两个端点就可以了. 然后合并两个连通块的时候更新一下. Code #include <cstring> #include <algorithm> #include <cstdio>…
description LOJ 6500 solution 根据常有套路,容易想到将区间差分转化为异或数组上的单点修改,即令\(b_i=a_i \ xor\ a_{i-1}\), 那么将\([l,l+k-1]\)取反,就相当于将\(b[l]\)与\(b[l+k]\)取反,若\(b[l]\)与\(b[l+k]\)都是1,等于是二者消掉了 于是发现一次操作只会对\(mod k\)余数相同的位置造成影响,并且每次操作只能消去两个1, 故区间\([l,r]\)的\(b\)数组能全部变成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…