差不多是原题啊. 求最长链变成了最长链计数,其余没有变化. 这一次考试为了保险起见本蒟蒻还是写了上次没写的辅助数组. 代码: #include<bits/stdc++.h> #define N 50005 #define M 200005 #define mod 1000000007 #define ll long long using namespace std; inline int read(){ int ans=0; char ch=getchar(); while(!isdigit(…
传送门 考虑直接推式子不用优化怎么做. 显然每一个二进制位分开计算贡献就行. 即记录fi,jf_{i,j}fi,j​表示距离iii这个点不超过jjj的点的每个二进制位的0/10/10/1个数. 但直接存是会爆炸的. 考虑到每个数只会被用一次,所以可以考虑主席树那种复用信息的思想来继承长链后代的信息,然后短链直接暴力统计贡献就行. 由于ldxldxldx蒟蒻是口胡选手只会暴力写法,因此正解差不多是照着标程写的233. 细节较多,用指针维护比较自然一些. 代码…
这么sb的题考场居然写挂了2233. 假设n=∏iaiki" role="presentation" style="position: relative;">n=∏iakiin=∏iaiki 那么集合中合法的数一定满足: t=∏i(1/aiki)" role="presentation" style="position: relative;">t=∏i(1/akii)t=∏i(1/aiki) 发…
签到水题啊... 这题完全跟图论没有关系. 显然如果确定了哪些点会被选之后顺序已经不重要了.于是我们给点按权值排序贪心从大向小选. 我们要求的显然就是∑i(a[i]−(n−i))" role="presentation" style="position: relative;">∑i(a[i]−(n−i))∑i(a[i]−(n−i)) 当这个贡献非正时停止枚举. 然后就没了. 代码: #include<bits/stdc++.h> #def…
传送门 对于每个点离线处理出向上走2i2^i2i班车到的最上面的点. 然后每个询问(u,v)(u,v)(u,v)先把(u,v)(u,v)(u,v)倍增到刚好走不到lcalcalca的情况(有一个点如果就是lcalcalca直接特判) 然后考虑最后把(u′,v′)(u',v')(u′,v′)连起来需要走一次还是两次. 这个就是一个二维数点问题了. 用dfsdfsdfs序求出每个点管辖的子树表示的区间. 然后对于询问(a,b)(a,b)(a,b)在dfs到aaa时统计bbb子树的答案. 把aaa子树…
传送门 仔细读题会发现只要所有点点权之和等于0一定有解. 如何构造? 直接当做树来构造就行了,非树边都赋值成0就行. 代码…
传送门 首先按照题意构造出转移矩阵. 然后可以矩阵快速幂求出答案. 但是直接做是O(n3qlogm)O(n^3qlogm)O(n3qlogm)的会TTT掉. 观察要求的东西发现我们只关系一行的答案. 于是倍增预处理出logloglog个矩阵每次变成O(n2)O(n^2)O(n2)转移. 代码…
传送门 今天的送分题. 首先考虑每次给要围上栅栏的矩阵里的整体加上1,如果栅栏被撤销就整体减1,最后比较两个点的值是否相同来进行判断. 然而这样的效果并不理想,很容易卡掉. 进一步思考,我们第iii次操作整体加上iii? 不行. 整体加上i2i^2i2? 还是不行. 等等. 貌似可以整体加上randrandrand. 于是欣喜地过了. 然而考完之后神仙出题人告诉我说整体加法可以被卡,而如果整体异或则被卡掉的几率很小. 于是重新写了一遍异或的版本. 代码…
传送门 T2防ak题? 其实也不是很难(考试时sb了). 直接变形一下求出区间长度在[l2,r2][l2,r2][l2,r2]之间,中位数≤l1−1\le l1-1≤l1−1的区间数,和区间长度在[l2,r2][l2,r2][l2,r2]之间,中位数≤r1\le r1≤r1的区间数就行了. 继续变变形,一个区间的中位数如果≤k\le k≤k. 那么显然有:区间中≤k\le k≤k的数的个数≤\leq≤区间中>k>k>k的数的个数. 我们记smallismall_ismalli​表示111…
传送门 签到题. 显然是可以贪心分组的,也就是尽量跟当前的分成一组. 这时我们需要判断a[l]+a[r],a[l+1]+a[r]...a[r−1]+a[r]a[l]+a[r],a[l+1]+a[r]...a[r-1]+a[r]a[l]+a[r],a[l+1]+a[r]...a[r−1]+a[r]是否在fibfibfib数列中出现过 . 由于2e92e92e9范围内兔子数列只有40+个数,因此我们反向思考,枚举fibfibfib数列,判断当前组内是否存在fib[i]−a[r]fib[i]-a[r]…