摘要:
题意 给定一棵树,初始每个节点权值为零,q次更改,每次修改将以v为顶点的深度为d的子树全部加上x,最后输出所有节点的权重。 思路 题目只要求每个点最后的值,那么经过观察,发现一个点最后的权值大小只与他的父节点的更新有关,那么我们就只需要考虑他的父节点到他这条链上的情况,把这条链拿出来成为线段,然后维 阅读全文
摘要:
数论基础 算术基本定理(唯一分解定理) 任何一个大于1的自然数都可以唯一分解成有限个素数的乘积 $N=p_1^{a_1}\times p_2^{a_2}\times...\times p_n^{a_n} | p_1<p_2<...<p_n ,a_i\in Z$ 上式中$p_i$为素数 有关素数筛 埃 阅读全文
只有注册用户登录后才能阅读该文。 阅读全文
摘要:
题意 求一个分数在二进制表达下的最短循环节和循环开始的地方。 思路 我们先把分数转换成最简,只要p和q同除gcd(p,q)即可。 然后众所周知,把一个小数转换成二进制的方法是把他不断乘2,然后取整数部分,组成小数。 在循环开始时,我们可以得到这样一个式子:$p\times2^i\equiv p\ti 阅读全文
摘要:
题意 给定n个数,q次询问,每次输出[l,r]区间的超级幂,对m取模。 思路 超级幂问题就想到用欧拉降幂来处理 欧拉降幂公式:$a^b \% m=a^{b\%\varphi (m)+\varphi(m)}\%m,(b>\varphi(m))$ 本题用递归处理欧拉降幂,在$logm$次降幂后$\var 阅读全文
摘要:
此题还有LCA+tarjin离线查询做法,详见这里 关于ST表 解决RMQ问题,dp[i][j]表示从第i位开始长度为(1<<j)的区间的最值 维护的时候采用倍增思想,维护dp[i][j+1]=opt(dp[i][j],dp[i+(1<<j)][j]) 查询的时候,两端点为l,r,则长度len=r- 阅读全文
摘要:
题意 n个女孩子跟n个男孩子过家家,女孩子选男孩子,告诉你每个女孩子可选的男孩子与女孩子之间的好友关系,好友关系是互相的而且是传递的,然后如果两个女孩子是好友,他们可选的男孩子也是可以合并的。然后每一轮进行匹配,匹配成功后开始下一轮,每个女孩子只能选同一个男孩子一次,问最多能玩几轮。 思路 首先,好 阅读全文
摘要:
题意 有n个数和m个运算符,按顺序选m个数进行运算,初值为k,问最后能得到的最大值是多少。 思路 dp[i][j]表示选到了第i个数时用了j个运算符,观察发现,一个数只能由他前一个状态的最大值或最小值转移过来(因为乘上一个负数会使最小的数变最大),所以我们同时维护最大最小。 然后转移就行了,需要注意 阅读全文
摘要:
题意 维护一个数据结构,使得能进行两种操作 1.查询[l,r]内a[l]×L+a[l+1]×(L−1)+⋯+a[r−1]×2+a[r]之和,L是区间长度。 2.单点更新一个值 思路 线段树和树状数组只能维护区间和,但此题每项有与区间长度相关的权值。 聪明的鸡神想到了三角形法,分别维护(n-i)*a[ 阅读全文
摘要:
题意 后浪推前浪,每个浪是一个矩形,由两条边组成,后形成的浪会把之前浪的边吞掉,问最后剩下的边的总长度。 思路 越后生成的浪保留的边越多,所以我们反过来放就保证我们先放的不会被吞,采用集合存放点,每次放新的点的时候查找到他正左端的点和正右端的点,在ans上加上横纵坐标之差就完成了。 题目保证没有任两 阅读全文