08 2019 档案

摘要:【模板】树链剖分 "题目传送门" 代码如下 cpp include include include define maxn 100005 using namespace std; typedef long long ll; struct T{ int data, next; }e[maxn vec; 阅读全文
posted @ 2019-08-27 20:29 whisperlzw 阅读(164) 评论(0) 推荐(0)
摘要:Boring counting "题目传送门" 解题思路 后缀数组。枚举每种长度,对于每个字符串,记录其最大起始位置和最小起始位置,比较是否重合。 代码如下 阅读全文
posted @ 2019-08-27 19:57 whisperlzw 阅读(124) 评论(0) 推荐(0)
摘要:CSL 的密码 "题目传送门" 解题思路 后缀数组。对于每一个后缀$k$都有$n k + 1$个前缀,把所有不和前一个(排序后的)公共且长度大于$m$的前缀个数加起来。 代码如下 阅读全文
posted @ 2019-08-27 19:50 whisperlzw 阅读(256) 评论(0) 推荐(0)
摘要:【模板】后缀排序 "题目传送门" 代码如下 cpp include define INF 0x3f3f3f3f using namespace std; typedef long long ll; inline int read(){ int res = 0, w = 0; char ch = 0; 阅读全文
posted @ 2019-08-27 19:39 whisperlzw 阅读(122) 评论(0) 推荐(0)
摘要:魔法森林 "题目传送门" 解题思路 把每条路按照$a$的值从小到大排序。然后用LCT按照b的值维护最小生成树,将边按照顺序放入。如果$1$到$n$有了一条路径,就更新最小答案。这个过程就相当于枚举了每一个$a$作为最大的$a$,然后求出了其对应的最小$b$的最大值。 代码如下 阅读全文
posted @ 2019-08-24 15:47 whisperlzw 阅读(157) 评论(0) 推荐(0)
摘要:【模板】最小生成树 "题目传送门" 解题思路 用LCT来维护最小生成树。 除了把各顶点作为节点外,每条边也都视为一个节点。对于要加入的边$e$,检查其两顶点$x$和$y$是否在同一棵树中,如果不在,则让$e$连接$x$和$y$如果在一棵树中,则找到$x$到$y$的路径上最长的边,与$e$比较,如果$ 阅读全文
posted @ 2019-08-24 15:14 whisperlzw 阅读(178) 评论(0) 推荐(0)
摘要:【模板】Link Cut Tree (动态树) "题目传送门" 解题思路 妈妈我终于学会LCT了。 代码如下 cpp include using namespace std; const int N = 300005; int v[N], fa[N], ch[N][2], sum[N]; bool 阅读全文
posted @ 2019-08-24 11:40 whisperlzw 阅读(112) 评论(0) 推荐(0)
摘要:数字计数 "题目传送门" 解题思路 用$dp[i][j][k]$来表示长度为$i$且以$j$为开头的数里$k$出现的次数。 则转移方程式为:$dp[i][j][k] += \sum_{t=0}^{9} dp[i 1][t][k]$,即在每个数前面放一个$j$,但是对于放在前面的这个$j$我们还没有计 阅读全文
posted @ 2019-08-24 11:35 whisperlzw 阅读(171) 评论(0) 推荐(0)
摘要:path "题目传送门" 解题思路 先用vector存图,然后将每个vector按照边的权值从小到大排序。将每个顶点作为起点的边里最短的边存入优先队列。对于存入优先队列的信息,应有边起点,终点,是其起点的第几短边,以及路径总长度。优先队列按照路径长度从小到大排序,每次出队当前最短的路径,对于一条路径 阅读全文
posted @ 2019-08-24 11:00 whisperlzw 阅读(230) 评论(0) 推荐(0)
摘要:array "题目传送门" 解题思路 操作1是把第pos个位置上的数加上$10^7$,操作2是找到区间\[1,r]中没有且大于k的最小的数。注意到k的范围是小于等于n的,且n的范围是$10^5$,远小于$10^7$,所以对于操作1,可以视为把第pos个位置上的数删去。 因为所有节点上的数都是唯一的, 阅读全文
posted @ 2019-08-24 10:40 whisperlzw 阅读(132) 评论(0) 推荐(0)
摘要:Governing sand "题目传送门" 解题思路 枚举每一种高度作为最大高度,则需要的最小花费的钱是:砍掉所有比这个高度高的树的所有花费+砍掉比这个高度低的树里最便宜的m棵树的花费,m为高度低的里面需要砍掉的个数。 所以,可以利用权值线段树,按照高度从小到大的枚举顺序将各个种类的树放入,维护每 阅读全文
posted @ 2019-08-08 20:01 whisperlzw 阅读(190) 评论(0) 推荐(0)
摘要:Snowy Smile "题目传送门" 解题思路 先把y离散化,然后把点按照x的大小进行排序,我们枚举每一种x作为上边界,然后再枚举其对应的每一种下边界。按照这种顺序插入点,这是一个压维的操作,即在线段树中的y位置加上其w,并利用线段树来更新动态的最大子段和。 代码如下 cpp include de 阅读全文
posted @ 2019-08-07 21:54 whisperlzw 阅读(767) 评论(0) 推荐(0)
摘要:Upgrading Technology "题目传送门" 解题思路 对于这题,我们可以枚举一个k从0\~m,表示当前我们把所有技能最少升到了k级,且至少有一个为k级。 此时我们刚好获得了前k个d\[]的收益,并花费了所有技能升到k级的花费。因为现在我们已经把所有技能都升到k了,为了获得当前情况下的最 阅读全文
posted @ 2019-08-04 14:50 whisperlzw 阅读(164) 评论(0) 推荐(0)
摘要:generator 1 "题目传送门" 解题思路 矩阵快速幂。只是平时的矩阵快速幂是二进制的,这题要用十进制的快速幂。 代码如下 阅读全文
posted @ 2019-08-02 16:56 whisperlzw 阅读(134) 评论(0) 推荐(0)
摘要:Minimal Power of Prime "题目传送门" 解题思路 先打$N^\frac{1}{5}$内的素数表,对于每一个n,先分解$N^\frac{1}{5}$范围内的素数,分解完后n变为m,如果m等于1,那么答案就是$N^\frac{1}{5}$内分解的素数里的最小数量k。否则,继续分解, 阅读全文
posted @ 2019-08-01 09:46 whisperlzw 阅读(195) 评论(0) 推荐(0)
摘要:K th Closest Distance "题目传送门" 解题思路 二分答案+主席树 先建主席树,然后二分答案mid,在l和r的区间内查询\[p mid, p+mid]的范围内的数的个数,如果大于k则说明这个范围内存在第k小的数,r=mid,否则不存在,l=mid+1。 代码如下 阅读全文
posted @ 2019-08-01 09:02 whisperlzw 阅读(162) 评论(0) 推荐(0)