区间问题,很快就想到莫队,原来还能用主席树做,奇妙。
莫队
莫队算法就不说了,有点含量的就是update函数,注意的是当一个数字增加到个数为1,我们计数++,当一个数字减少到个数为0,计数–。还有update函数,要用void,int会超时
1 |
|
主席树
妈耶,理解原理后敲完一遍就AC,天不亡我!!!!
我们遍历N个元素,如果这个元素之前没有出现过,那么正在建立的这颗线段树就要把对应的这个位置上加1,否则的话如果这个元素之前出现过的最后位置是Index, 那我们就把这个位置的数目-1,在以当前的位置更新目前的这棵线段树。
这样当我们查询L,R区间时,我们就找以rt[R]为根的树,因为每棵线段树都存的是从起点到当前元素的不重复元素个数,所以在rt[R]的树上,我们可以找到任意起点到R这段区间的不重复元素的个数。
1 | #include <cstdio> |