参照了nocow上的解法,照搬过来…… 易知一个数X在数列中在另一个数Y前,当且仅当X前缀小于Y或前缀相等X短,那么我们分布考虑,比如对于数48561: 5位上:10000~48560; 4位上:1000~4856; 3位上:100~485; 2位上:10~48; 1位上:1~4. 这样我们就得到了1..N中4856的位置,可以用这个来判错. 接下来的方法类似,为了使得我们的N满足要求,我们必须去找比48561大且前缀比其小的数,同样有: 6位上:100000~48569; //注意红色部分比…