03 2019 档案

摘要:题面及大致思路:https://www.cnblogs.com/Yangrui-Blog/p/9623294.html, https://www.cnblogs.com/New-Godess/p/4567282.html 每个点维护2个矩阵,一共15个变量。矩阵a: [a(i - 1), a(i), 阅读全文
posted @ 2019-03-31 00:10 维和战艇机 阅读(433) 评论(0) 推荐(1)
摘要:题面简洁明了,一看就懂 做了这个题之后,才知道怎么用线段树维护递推式。递推式的递推过程可以看作两个矩阵相乘,假设矩阵A是初始值矩阵,矩阵B是变换矩阵,求第n项相当于把矩阵B乘了n - 1次。 那么我们线段树中每个点维护把矩阵B乘了多少次,懒标记下放的时候用快速幂维护sum。 阅读全文
posted @ 2019-03-27 16:25 维和战艇机 阅读(296) 评论(0) 推荐(0)
摘要:题面一看就是裸的数据结构题,而且一看就知道是主席树。。。 一共四种操作:1:把区间[l, r]的数都加上d,并且更新时间。2:查询当前时间的区间和。3:查询历史时间的区间和。4:时光倒流到某个时间。 正常来说,主席树比较难支持区间操作,但是我们可以用标记永久化的方法去实现区间操作。标记永久化和懒标记 阅读全文
posted @ 2019-03-27 11:06 维和战艇机 阅读(577) 评论(0) 推荐(0)
摘要:题面:https://vjudge.net/problem/HYSBZ-2653 博客:https://blog.csdn.net/litble/article/details/78984846 这个题很明显不能建n棵动态开点的线段树,因为每颗线段树点分布都很密集,这样相当于都是满二叉树。但是,我们 阅读全文
posted @ 2019-03-26 23:57 维和战艇机 阅读(159) 评论(0) 推荐(0)
摘要:题意:给你一个数组a,有m次询问,每次问区间[l, r]中最多可以取多少个数字(相同的数字最多取k个),强制在线。 思路:可以先预处理一个数组b,b[i]指和a[i]相同的从i开始第k + 1个数的位置。求出b数组后,如果询问区间[l, r]中的数,若b[i]大于r,说明从这个数往后的和b[i]相同 阅读全文
posted @ 2019-03-26 12:18 维和战艇机 阅读(270) 评论(0) 推荐(0)
摘要:题意:https://blog.csdn.net/qq_39809664/article/details/79871282 思路:我们考虑LIS的状态转移,对于这个题,假设现在扫描到的边是(u, v, w),那么需要找以u为结尾的,并且值小于w的dp值。我们可以对每个节点建一颗权值线段树,询问的时候 阅读全文
posted @ 2019-03-25 19:32 维和战艇机 阅读(161) 评论(0) 推荐(0)
摘要:博客:http://www.cnblogs.com/mangoyang/p/9979465.html 李超线段树支持两种操作:1:插入一条直线。2:询问在x = c与这些直线的交点中最大的y坐标。 插入的时候,如果有交点,本层节点留下来的是优势直线,劣势的那条去递归比较。优势直线是指在这个区间中覆盖 阅读全文
posted @ 2019-03-25 18:37 维和战艇机 阅读(163) 评论(0) 推荐(0)
摘要:这种题就是难者不会,会者不难。 博客讲的很详细了 代码: 阅读全文
posted @ 2019-03-20 23:53 维和战艇机 阅读(217) 评论(0) 推荐(0)
摘要:题意及思路 这个题加深了我对主席树的理解,是个好题。每次更新某个点的距离时,是以之前对这个点的插入操作形成的线段树为基础,在O(logn)的时间中造出了一颗新的线段树,相比直接创建n颗线段树更省时间。比较的时候二分比较,为了加快比较给每个点设置一个hash值。 代码: 阅读全文
posted @ 2019-03-20 19:14 维和战艇机 阅读(282) 评论(0) 推荐(0)
摘要:题意和思路看这篇博客就行了:https://www.cnblogs.com/cjyyb/p/10507937.html 有个问题需要注意:对于每个scc,只需要考虑进入这个scc的时间即可,其实和从哪个点进没有关系,因为scc内每个点都可以互相到达,所以只需记录时间就囊括了所有的情况,比如时间3从1 阅读全文
posted @ 2019-03-20 00:19 维和战艇机 阅读(577) 评论(0) 推荐(0)
摘要:题意看这篇博客。 思路参考的这篇博客。 补充:面对这种问题有一个常见的套路。比如计算若干个区间对答案的贡献这种问题,直接暴力可能复杂度到O(n ^ 2), 而我们可以计算出每个元素在多少个合法区间中,然后计算贡献,这样可以降到O(n)。对于此题,计算第一类贡献时就是这种方法。计算有多少种情况包含了这 阅读全文
posted @ 2019-03-18 17:36 维和战艇机 阅读(223) 评论(0) 推荐(0)
摘要:题意及思路看这篇博客就行了,讲得很详细。 下面是我自己的理解: 如果只有2,没有3的话,做法就很简单了,只需要对数组排个序,然后从小到大枚举最大的那个数。那么它对答案的贡献为(假设这个数排序后的位置是pos)2 ^ (pos - 1) * 2 ^ a[pos]。意思是a[pos]这个数必选,其它比它 阅读全文
posted @ 2019-03-18 10:30 维和战艇机 阅读(227) 评论(0) 推荐(0)
摘要:题面以及思路:https://blog.csdn.net/glqac/article/details/38402101 代码: 阅读全文
posted @ 2019-03-17 17:34 维和战艇机 阅读(148) 评论(0) 推荐(0)
摘要:Codeforces 1107F(线性DP或二分匹配)博客 代码 Codeforces 1117D(线性DP +矩阵加速递推/ 杜教BM)博客 代码 Codeforces 1132F(区间DP) 类似题目:POJ1390 Codeforces 1107E Codeforces 1132E(记忆化搜索 阅读全文
posted @ 2019-03-15 15:16 维和战艇机 阅读(157) 评论(0) 推荐(0)
摘要:Codeforces 1107G 博客:https://www.cnblogs.com/tusikalanse/p/10347821.html 代码:https://codeforces.com/contest/1107/submission/49356234 Codeforces 1132G 博客 阅读全文
posted @ 2019-03-15 10:38 维和战艇机 阅读(171) 评论(0) 推荐(0)
摘要:题意:给你一个数组a,长度为。有两种操作。一种是改变数组的某个元素的值,一种是满足某种条件的数组b有多少种。条件是:b[i] <= a[i],并且b[1]^b[2]...^b[n] = k的数组有多少种。数组a的元素都小于1000. 思路:因为数很小,我们把数变成二进制数,然后拆分二进制数。比如11 阅读全文
posted @ 2019-03-14 23:26 维和战艇机 阅读(189) 评论(0) 推荐(0)
摘要:题意:有一个数组a和一个数组k,数组a一直保持一个性质:a[i + 1] >= a[i] + k[i]。有两种操作:1,给某个元素加上x,但是加上之后要保持数组a的性质。比如a[i]加上x之后,a[i + 1]<a[i] + k[i],那么a[i + 1]就变成a[i] + k[i],否则不变。同理 阅读全文
posted @ 2019-03-13 23:49 维和战艇机 阅读(716) 评论(0) 推荐(1)
摘要:题意:给你和一个数组(是一个排列)和一些二元组,二元组(x, y)表示如果x正好在y前面而且相邻,那么x和y可以交换位置,问最后一个元素最多可以向前移动多少步? 思路:对于每个数,有两种选择,一种是向后走,一种是向前走。假设我们决定让这个数向前走,那么把所有以它结尾的二元组的cnt加1。cnt代表的 阅读全文
posted @ 2019-03-13 00:12 维和战艇机 阅读(849) 评论(0) 推荐(1)
摘要:题意:有n个可重集合,有四种操作: 1:把一个集合设置为单个元素v。 2:两个集合求并集。 3:两个集合中的元素两两求gcd,然后这些gcd形成一个集合。 4:问某个可重复集合的元素v的个数取模2之后是多少。 思路:因为集合的元素是对2取模,那么我们可以用bitset来代替可重复集合。但是,如果每个 阅读全文
posted @ 2019-03-12 21:48 维和战艇机 阅读(292) 评论(0) 推荐(0)
摘要:题意:给你n组操作,分别为压栈,出栈,询问栈顶元素。每一组操作有一个时间戳,每次询问栈顶的元素的操作询问的是在他之前出现的操作,而且时间戳小于它的情况。题目中不会出现栈为空而且出栈的情况。 例如: push 100 1 peak 6 push 200 5 询问的结果是100。 思路:先把时间戳离散化 阅读全文
posted @ 2019-03-11 15:18 维和战艇机 阅读(205) 评论(0) 推荐(0)
摘要:题意:题目中定义了一种运算,把数字x变成数字x的二进制位数。问小于n的恰好k次运算可以变成1的数的个数(题目中的n是二进制数,n最大到2^1000) 思路:容易发现,无论多么大的数,只要进行了一次运算,一定会变成1000以内的数,所以我们可以预处理1000以内的数经过多少次运算到1。之后,我们可以枚 阅读全文
posted @ 2019-03-01 14:41 维和战艇机 阅读(311) 评论(0) 推荐(0)