随笔分类 -  线段树,树状数组

摘要:传送门 思路:对于每一个询问,我们都需要知道,从根节点出发,重量为X的球到达v点期间,往左走了几个点(比X大的几个,比X小的几个),往右走了几个点(比X大的几个,比X小的几个)。我们可以用dfs从根节点出发,先遍历左子树,再遍历右子树,对于遍历到的当前节点,我们查看是不是有到该点的询问,如果有,就需 阅读全文
posted @ 2020-11-21 19:32 SummerMingQAQ 阅读(189) 评论(0) 推荐(0)
摘要:传送门 思路:我们需要求距离为d+1的LIS,我们可以用延迟更新方法,a[]为该点数值,f[]为以改点结尾的LIS长度。当inx - d - 1 > 0时,我们才更新这个点的信息,这样就解决了距离的问题。 1 #include <iostream> 2 #include <cstdio> 3 #in 阅读全文
posted @ 2020-11-13 20:03 SummerMingQAQ 阅读(175) 评论(0) 推荐(0)
摘要:传送门 题目大意:一条水平直线上有树和蘑菇,已知每颗树的坐标,高度和向左,向右倾倒的概率,已知蘑菇的坐标和该蘑菇的价值,求蘑菇价值总和的期望值。 思路:可以知道一颗树的倾倒可以看做一个区间的概率更新,我们可以离散化蘑菇的坐标点,然后区间更新该区间所有蘑菇的概率,然后遍历所有蘑菇的期望值。 这里我们可 阅读全文
posted @ 2020-11-13 19:53 SummerMingQAQ 阅读(224) 评论(0) 推荐(0)
摘要:G. Pot!! 思路:区间维护线段树即可,由题意可知我们只需要区间维护cnt[2, 3, 5, 7]个数的最大值即可。 1 #include <cstdio> 2 #include <iostream> 3 #include <cstdio> 4 #include <algorithm> 5 #i 阅读全文
posted @ 2020-05-11 11:04 SummerMingQAQ 阅读(349) 评论(0) 推荐(0)
摘要:Cows 思路:我们可以按照每个范围的S从小到大排序,相同的S按E从大到小排序,这样的好处是当前范围的S一定大于等于之前范围的S(即当前的范围可能被之前范围的包围),那么我们只需要统计之前的范围E比当前的范围E大于等于的有几个即可。这里需要注意如果两个范围完全相同的情况,我们可以把当前的范围与之前的 阅读全文
posted @ 2020-04-08 09:45 SummerMingQAQ 阅读(223) 评论(0) 推荐(0)
摘要:预备知识:反素数解析 思路:有了反素数的解法之后就是线段树的事了。 我们可以用线段树来维护哪些人被淘汰,哪些人没被淘汰,被淘汰的人的位置,没被淘汰的人的位置。 我们可以把所有人表示为一个[1,n]的区间,没被淘汰的人权值为1,那么通过线段树维护区间和,就可以知道没被淘汰人的分布情况,tree[roo 阅读全文
posted @ 2020-03-25 20:01 SummerMingQAQ 阅读(251) 评论(0) 推荐(0)
摘要:题目链接:https://i-beta.cnblogs.com/posts/edit 思路:对输入数据反向思考,那么输入的位置x代表他之前已经有x个人存在, 但是后面的人会插队,那么已经有x个人存在可以表示为,前面应该还有几个空位。 因为我们是反向遍历位置关系,那么我们只需要维护数组前面有x个空位就 阅读全文
posted @ 2020-03-23 15:31 SummerMingQAQ 阅读(224) 评论(0) 推荐(1)
摘要:题目链接:https://vjudge.net/problem/HDU-2795 思路:h = 1e9行不通,因为广告是1*w的,所以n个广告最多只需要 h = n的高度,那么h=2e5就可以接受了。 用树状数组维护区间最大值。 从前往后区间查询哪一大块块首先满足条件,然后一直缩小区间,直到区间长度 阅读全文
posted @ 2020-03-19 19:08 SummerMingQAQ 阅读(241) 评论(0) 推荐(0)
摘要:清楚的图解,解释树状数组求逆序对的方法,转载:https://blog.csdn.net/ssimple_y/article/details/53744096 题目:https://vjudge.net/problem/HDU-1394 思路:因为数字[1,n],把a[i]放到末尾,逆序对数量会增加 阅读全文
posted @ 2020-03-18 23:23 SummerMingQAQ 阅读(214) 评论(0) 推荐(0)