摘要:
手写STL,卡常专用。 node为变量类型,可以自由定义,以下不再赘述。 1、stack(栈) 开一个数组,和一个top指针,压栈时++,弹栈时--即可。 2、queue(循环队列) 用两个指针,记录队头和队尾,达到两端时特判即可。 3、deque(双端队列) 和队列类似。 4、priority_q 阅读全文
摘要:
红黑树是一种二叉搜索树,单次操作复杂度上限$logn$,效率极高,基本用指针实现。 为了减小常数,红黑树的操作全部非递归实现。 下面系统介绍一下红黑树,包括复杂度的证明和基本操作。 1、红黑树的结构: 红黑树是二叉搜索树,满足BST性质,左儿子数值都小于当前节点,右儿子数值都大于当前节点,中序遍历单 阅读全文
摘要:
DAY 0 准备出发。 出发前教练说遇到事不慌,打电话,又听教练说了说历年赶车经历。 然后这趟路上居然没有什么大事。 在车上有些闲,于是就和其他人聊了会天,聊着聊着没意思,就用手机翻博客园。 这样就不用现场打印东西拿着了嘛。 中午到站吃饭,凭借直觉感觉二楼人超多,就在一楼买了份KFC,待回他们都下来 阅读全文
摘要:
T1: 设$dp[i][j]$表示考虑到第$i$层,到每个点路径的奇偶性状态为$j$的方案数。 但是转移是O(k^2)的。 把每个点的出边集合压成一个二进制数,可以将转移复杂度优化到$O(k)$。 还可以进一步优化。 预处理出$f[i][j][0/1]$表示在第$i$层,状态为$j$时,边是否取反的 阅读全文
摘要:
T1: 答案为$\frac{\sum \limits_{i=1}^n abs(a_i-a_{ans})}{2^k}$。 因为每次两个CPU一定选择不同的方案。 时间复杂度$O(n)$。 T2: 路径一定由左括号,中间一段和右括号组成。 左右括号可以用hash匹配。 中间一段的方案可以DP求出。 设$ 阅读全文
摘要:
T1: 枚举中心所在位置,每次贪心找到左右最近的一个相同字符移动。 可以用单调指针扫。 时间复杂度$O(n^2)$。 T2: 两个数的乘积为平方数,那么这两个数各自去掉平方因子后相等。 去掉平方因子后可以用map统计答案。 对于普通的$O(\sqrt{p})$试除法,复杂度不允许,就算将所有的质数筛 阅读全文
摘要:
T1: 断环成链并复制一倍,然后区间DP。 设状态为合并区间$[l,r]$的最大得分。 时间复杂度$O(n^3)$。 T2: 最后一次向上爬不会滑下来,于是可以枚举最后一次吃的药丸。 将所有药丸按照$A-B$排序,每次贪心地选择最大的几个值,二分出到达的天数。 还需要判断中间高度是否严格大于$C$, 阅读全文
摘要:
T1: 求$\sum \limits_{i=0}^p \lfloor \frac{iq}{p} \rfloor$的值。 发现从0枚举很鸡肋。 \begin{array}{ll} 2ans &=& 2\sum \limits_{i=1}^p \lfloor \frac{iq}{p} \rfloor \ 阅读全文
摘要:
T1: 高精度复杂度不允许,但是我们只关注相对大小,所以可以对答案取对数。 $lg(X^Y)=YlgX$ $lg(Y!)=\sum \limits_{i=1}^Y lgi$ 直接比较即可。 时间复杂度$O(n)$。 T2: 考虑对序列进行差分。 差分后区间加减转化为对相距$k$的两个数同时加上两个相 阅读全文
摘要:
T1: 将序列求前缀和,题意转化为对于位置$i$和$j$,满足$i<j$,$a_i<a_j$并且$b_i<b_j$,最大化$j-i+1$的值。 典型的三维偏需,可以CDQ做。 更好的做法是按一维排序,然后用数状数组维护。 时间复杂度$O(nlogn)$。 T2: 每次可以选择一个根,将左右子树接上, 阅读全文
摘要:
T1: 显然每个数是独立的。 无解情况的判定用裴蜀定理即可 用$ex_gcd$求出一组特解,对于每个数,只需要求出使$|x|+|y|$最小的一组解即可。 最优解一定取在$x$或$y$接近$0$时,取个$min$即为答案。 时间复杂度$O(n)$。 T2: 根据贪心思想。 考虑两个数对$(a_i,b_ 阅读全文