随笔分类 -  数据结构_线段树

摘要:题意:给定三个序列abc,问最少操作几次使得满足a<b<c 题解:将三个序列合并起来,设cnt[i][1/2/3]表示前i个数有几个是来自序列1/2/3的。 枚举第一个序列要到i,此时对于第一个序列的操作次数就是cnt[i][2]+cnt[i][3]+cnt[n][1]-cnt[i][1] 对于第二 阅读全文
posted @ 2019-11-15 11:20 worcher 阅读(260) 评论(0) 推荐(0)
摘要:题目大意:给你一个序列a,你有三个操作,0: x y t将a[x,y]和t取min;1:x y求a[x,y]的最大值;2:x y求a[x,y]的sum 题解:首先很明显就是线段树裸题,那么考虑如何维护 区间最大值和区间sum很好维护,0操作不好做,那么考虑怎么快速解决0操作 很容易想到维护区间最大值 阅读全文
posted @ 2019-09-21 00:07 worcher 阅读(198) 评论(0) 推荐(0)
摘要:题意:给你一个序列,求满足要求的子序列个数,其中要求为: 1、子序列的max-子序列长度len<=k 2、子序列中不出现重复的数字 题解:首先看到子序列max,很容易想到枚举最大值然后分治,这个做法有人通过,但是我并没想到如何做 子序列max还有一个思路是单调队列,这里我们通过单调队列进行解题 首先 阅读全文
posted @ 2019-08-21 22:45 worcher 阅读(322) 评论(0) 推荐(0)
摘要:题目大意:给你一堆数,每次询问区间[l,r]中离p第k小的|ai-p| 题解:考虑二分答案,对于每个可能的答案,我们只需要看在区间[l,r]里是否有≥k个比二分的答案还要接近于p的 考虑下标线段树,并将其可持久化,线段树i存储1~i中每个数有几个 因为数比较大,考虑离散化,这样最多1e5个数,可以接 阅读全文
posted @ 2019-07-31 18:42 worcher 阅读(324) 评论(0) 推荐(0)
摘要:题目大意:给你一个序列,对于每个i,你可以选择1~i-1中任意多的数并将它删去,剩余的数(包括i)∑≤m,问对于每个i最少删几个数可以达到要求 题解: 考虑朴素的思想,对于每个i,我只需要删去最大的若干个使得∑≤m即可,时间复杂度O(n^2) 显然不可接受,考虑优化 显然可以看出,因为只需要删去最大 阅读全文
posted @ 2019-07-30 16:52 worcher 阅读(404) 评论(0) 推荐(0)
摘要:题目大意:给出一串序列,询问最长的合法子串为多长,其中合法子串必须满足子串中[1,C]的数量大于等于K或者为0 题解: 定义右端点为包含某一点所需要的最小区间的右端点 那么初始化时就可以O(n)求出每个点的右端点 定义最小包含区间为某个点到其右端点的区间 定义不同的区间为当两个最小包含区间的最左边元 阅读全文
posted @ 2019-07-30 16:40 worcher 阅读(382) 评论(0) 推荐(0)