利用线段树统计区间内不同种类的个数

想到写这个是因为今年多校联合训练3的1004题

题目中有一个子问题是求一个串内不同数的种类数数 最小的区间。

官方题解(http://bestcoder.hdu.edu.cn/blog/2017-multi-university-training-contest-4-solutions-by-%e9%99%88%e6%9d%be%e6%9d%a8/

是利用线段树来处理的:

首先,预处理一下字符串,求出每到一个点 i ,它之前的最近的和它相同的数所在的坐标  pre[i] 。

我们从0开始依次枚举字符串中的字符,假设当前枚举到i点,则将区间pre[i]+1 ~ i 全部加1 ,这样,此时线段树中每个单节点x中存储的值 就是 区间 [x,i] 中的种类个数。

这样我们就可以在 O(nlogn)  的时间复杂度内求出所有区间的种类数 的最小值

原文地址:https://www.cnblogs.com/liuzhanshan/p/7296128.html