摘要:
早就学了,复习一下。 普通 \(\mathcal {O}(log_2(n))\) 的快速乘(龟速乘): LL QT(LL x, LL y) { LL ans = 0; for(; y; y >>= 1) { if(y & 1) ans = (ans + x) % n; x = (x + x) % n 阅读全文
摘要:
D 逆向思维,考虑一条边被多少条路径作为答案。 很套路吧,想到每次找到图中最大的边,断开,它的贡献为两边联通块的大小相乘再乘它的权值。反着来,每次用最小的边连接两个块,用并查集维护。 #include <cstdio> #include <algorithm> #include <cmath> #i 阅读全文
摘要:
以下 \(p\) 为模数,\(x\) 为我们要求逆元的数。 最直接的是利用费马小定理,$x^{-1}\equiv x^{p-2}(mod\ p)\(是,时间复杂度:\)\mathcal {O}(nlog_2(n))$。 这里有两个线性做法: 令 \(p=ax+b\),则 \(ax+b\equiv 0 阅读全文
摘要:
来看以下例题:令 \(a_i\) 为 \(\sum_{j \subsetneq i}a_j\)。你会说,这简单啊,枚举子集直接 \(\mathcal O(3^n)\)。 好的,有没有什么更优秀的算法呢?引入高维前缀和。就比如我们要求一个三维的前缀和,需要写一个比较长的容斥式,并且扩展到多维转移的时间 阅读全文
摘要:
C 发现是个经典的括号匹配。 D emm... 想到按左端点排序。一个很直接的想法,对于第 \(i\) 段区间,前 \(i-k+1\) 段区间右端点的最大值会与它的左端点构成一个小区间,最后将这些区间合并即可。值得一提的是,在这之前你要将被包含的区间删掉,不然会出现错误,这显然。(emm...考试时 阅读全文
摘要:
D 不难的。 两个点的的关系要么是左上-右下,要么是左下-右上,然后拆绝对值(这是拆绝对值的很经典做法),用个前缀最小值维护即可。 值得一提的是,若这题要求在线做,需要用线段树/树状数组/二维线段树/二维树状数组。 E 这题本质上是求 \(n\) 个点的最小生成树,但由于 \(nm\leq 10^{ 阅读全文
摘要:
link 感悟:其实,一道题不妨从样例入手。 C 考场上 dfs “水过去” 的(感觉可以剪掉很多枝,常数 \(\frac{1}{500}\)),考后发现是正解(? 至于证明,现在不想理解,以后来填吧。 #include <cstdio> #include <algorithm> #include 阅读全文
摘要:
link 前言 其实就是一道线段树合并的板子,因为机房要求写就写了。 题意 问 \(1\sim n\) 的子树中各个子树的众数和。 分析 其实,一般如果要求各个子树的某个东西,我们一般都是考虑 线段树合并/dsu on tree/dfn+其他数据结构(可能还有其他做法,只不过我太菜了不会),所以我才 阅读全文
摘要:
ABC168 ABC172 ABC168 E ∙ (Bullet) 模拟赛时看错式子降智了。。。我是sb。 很显然吧,想到把带有 \(i\) 的式子独立出来。 则 \(\frac {A_i} {B_i}=-\frac {B_j} {A_j}\)。由于这个东西是有交换律的,即 \(\frac {A_j 阅读全文
摘要:
link 单调栈+单调队列+$dp$好题。 首先一眼看出是 \(dp\)。令 \(dp[i]\) 为推倒前 \(i\) 个骨牌所耗费的最小价值,(这个并没有单调性。 考虑 \(dp[i]\) 由什么转移来。 1.左边的翻过来(相当于自己向右边翻)。由于能转移过来的 \(j\) 并不是连续的(显然), 阅读全文
摘要:
link A \(ans=max(0,b-a+1)\) B \(\sum a[i]-n/2>=k?\) C 降智了,一直想容斥,,,浪费了10min。 其实很简单,按 \(a[i]\) 从小到大排序后,由于前面选数一定会使后面能选的数少 \(1\),所以 \(ans=\sum (a[i]-i+1)\ 阅读全文