POJ 2182 Lost Cows
Description
N个数,1…N,乱序排列,现在告诉你每个数的前面有多少个比它小的,问排列顺序是什么?
Algorithm
一开始待选集合是1…N,从后往前,每次找到第x+1个数,然后把这个从待选集合里面删除
例如 1 2 1 0 从后往前
第一次 x = 0 从待选集合1 2 3 4 5 里找第0 + 1个数, 也就是 1, 把 1 从待选集合里面删除
第二次 x = 1 从待选集合 2 3 4 5 里找第 1 + 1 个数,也就是 3,把3从待选集合里删除
现在如何优化这个算法?
线段树
线段树的附加信息是这个区间内还存在多少集合内的数。这样每次找第几个的时候,就可以二分去找,从而减少时间复杂度