CF708D2

D题

题很好感觉思维得到了升华把整个题考虑成一个图对每对$\{i, j\}$只要tag[i] != tag[j]他们之间就要连边边权为$|2^i-2^j|$按照题意需要找一条边权不断上升的$\sum|s_i-s_j|$最大的路由于边权不断上升可以将边按边权排序外层$i$从小到大内层$j$从大到小然后使用动态规划dp[i][t]维护只使用前$t$条边时终点为$i$的路的路径权值最大值考虑转移发现$t$增加$1$时只有至多两个dp值会发生变化因为一步只引入了一条边而且它只能被加在已经考虑过的路径的末尾这样我们可以舍弃$t$维度而代之以时间维度$dp$数组只有一维dp[i]维护当前时刻以$i$结尾的路的路径权值最大值每当时刻前进1就新考虑一条边更新一下dp[i]dp[j]$dp_i = \max(dp_i, dp_j + |s_i - s_j|)$$dp_j=\max(dp_j, dp_i+|s_i-s_j|)$

区间众数

通用求众数离线做法离散化之后开线段树维护数出现的频率的最大值带单点修改然后再用莫队移动区间时就跑一个单点修改复杂度是$O(n\sqrt{n}\log n)$

Read More

筛选法建堆

这可能是本学期学习数据结构与算法课的最大收获就是知道了还有线性建堆的方法线性建堆可能也是有应用场景的比如用$O(n)$的空间及时间复杂度取出前$n/\log n$大的所有数

Read More

BIT在线求第k大数

在做小学期Day5C题在线维护中位数由于我没有做过也没有想到正解对顶堆卡了很久最后用一个奇怪的方法做出来了发现这个奇怪的做法复杂度稍高但是可以扩展对顶堆只能维护中位数或固定k的第k大数而奇怪做法可以在线查找第k大数k可变代价是$O(\log^2 n)$$n$为数列长度

Read More

day6E

题意

正权无向图$G$$n$个点与$m$条边你要回答$q$次询问每次询问$u,v$两点回答对于$u,v$两点这张图上有多少条边在它们任意一条最短路上出现

Read More

__builtin_popcount原理

小学期题用了这个函数觉得十分高级学习一个

这个函数用来数二进制数中1的个数正常的操作是unsigned int二进制表示下最右端是不是1若是1则计数器+1再右移重复32次这样的操作需要进行32次int运算效率不够高这个问题可以二分解决

Read More

CF630D2F

将每个独立集$V$考虑为原图中被染色的一些顶点而在原图中加边后$E'$可以得到一个子图$G'$这个子图如果满足一些条件$V$就是$E'$生成的子图$G'$中的一个独立集这些条件为

  1. 一条边的两端不同时被染色$V$中任意两点间没有边
  2. 没有孤立顶点被染色$V$中的每个点都应当与$E'$中的一条边相连

Read More

CF620D2E

由于一条路径可以包含一条边多次所以如果$a$能经历$k$条边到达$b$那就可以经过$k+2n$条边到达$b$只需要在路径中随便找一条边不停折返即可于是考虑对树黑白染色注意结论树是二分图从而可以dfs染成黑白两色方便考虑

Read More