LOJ#3109. 「TJOI2019」甲苯先生的线段树 发现如果枚举路径两边的长度的话,如果根节点的值是$x$,左边走了$l$,右边走了$r$ 肯定答案会是$(2^{l + 1} + 2^{r + 1} - 3)x + t$,可以发现$t < (2^{l + 1} + 2^{r + 1} - 3)$,于是考虑计算对于$t$,左边走了$l$,右边走了深度$r$,几种走法使得总和为$t$ 容易发现右边最小一定是走了$2^ - 1$于是可以扣掉 再发现我们其实是对于左边和右边串选择长度为$[1,l…
题目:https://loj.ac/problem/2302 压30位,a最多落在两个位置上,拆成两次操作. 该位置加了 a 之后,如果要进位或者借位,查询一下连续一段 0 / 1 ,修改掉,再在含有 1 / 0 的那个位置上 -1 或者 +1 . 注意是在那个位置上 -1 或者 +1 而不是 -lowbit 或者 +lowbit . 询问都是 <=30n ,所以只维护 30n 的范围即可.注意线段树压 30 位,开 n 个位置恰好是 0*n ~ 29*n,所以开 n+1 个位置. 线段树只需维…
题目描述 一天小甲苯得到了一条神的指示,他要把神的指示写下来,但是又不能泄露天机,所以他要用一种方法把神的指示记下来. 神的指示是一个字符串,记为字符串 \(s_1\),\(s_1\) 仅包含小写字母 \(\texttt{a-z}\). 现在小甲苯想要写下神的指示,记为字符串 \(s_2\),\(s_2\) 仅包含小写字母 \(\texttt{a-z}\),要求 \(s_1\) 中的相邻的两个字母不能在 \(s_2\) 中相邻地出现. 现在给定 \(s_2\) 的长度,小甲苯想知道他有多少种方法…
题意 题目链接 Sol 线性基+线段树分治板子题.. 调起来有点自闭.. #include<bits/stdc++.h> #define fi first #define se second #define pb push_back #define bit bitset<B + 1> using namespace std; const int MAXN = 501, B = 1001, SS = 4001; inline int read() { char c = getchar…
问题描述 LG5337 BZOJ5508 题解 设\(opt_{i,j}(i \in [1,n],j \in [1,26])\)代表区间\([1,i]\),结尾为\(j\)的写法. 设\(exist_{i,j}(i,j \in [1,26])\)代表\((i,j)\)能否前后相邻,如果为\(1\),则不能. 则有 \[opt_{i,j}=\sum_{k=1}^{26} opt_{i-1,k}(exist_{k,j}=0)\] 发现\(n \le 10^{15}\),就这样递推肯定不行,所以矩阵优…
问题描述 LG5338 LOJ3105 BZOJ5509 题解 建立一棵\(\mathrm{Treap}\),把原来的\(val\)换成两个值\(ac,tim\) 原来的比较\(val_a<val_b\)改成(设两个结点分别为\(node_a,node_b\)): 1.若\(ac_a>ac_b\),则\(node_a<node_b\) 2.若\(1\)不成立,若\(ac_a=ac_b,tim_a<tim_b\),则\(node_a<node_b\) 3.若\(1,2\)均不成…
题目链接 问题分析 参照数据范围,我们需要一个能够在\(O(n\log n)\)复杂度内维护有序数列的数据结构.那么平衡树是很好的选择.参考程序中使用带旋Treap. 参考程序 #pragma GCC optimize( 3 ) #include <cstdio> #include <ctime> #include <algorithm> namespace Treap { struct member { int Number, Time; bool operator…
题目:https://loj.ac/problem/3055 先写了暴力.本来想的是 n<=300 的那个在树上暴力维护好整个字符串, x=1 的那个用主席树维护好字符串和 nxt 数组.但 x=1 的部分会 TLE ,而且似乎不太对的样子. #include<cstdio> #include<cstring> #include<algorithm> #include<vector> #define ll long long #define pb pu…
题目:https://loj.ac/problem/2339 两棵树的话,可以用 CTSC2018 暴力写挂的方法,边分治+虚树.O(nlogn). 考虑怎么在这个方法上再加一棵树.发现很难弄. 看了看题解,发现两棵树还有别的做法. 就是要最大化 d1[ x ] + d2[ x ] + d1[ y ] + d2[ y ] - 2*d1[ lca1(x,y) ] - 2*d2[ lca2(x,y) ] ,考虑在第一棵树 T1 上 dfs 地枚举 lca1 ,那么考虑的答案就是 T1 上在当前点 c…
描述 小豆现在有一个数 xxx ,初始值为 111 . 小豆有 QQQ 次操作,操作有两种类型: 111 $ m$ : x=x×mx=x×mx=x×m ,输出 xxx modmodmod MMM : $2 $ pospospos: x=x/x=x/x=x/ 第$ pos$ 次操作所乘的数(保证第 pospospos 次操作一定为类型 111,对于每一个类型 111 的操作至多会被除一次),输出 xxx modmodmod MMM . 输入 一共有 ttt 组输入. 对于每一组输入,第一行是两个数…