【JZOJ5456】奇怪的队列

Description

nodgd的粉丝太多了,每天都会有很多人排队要签名。
今天有n个人排队,每个人的身高都是一个整数,且互不相同。很不巧,nodgd今天去忙别的事情去了,就只好让这些粉丝们明天再来。同时nodgd提出了一个要求,每个人都要记住自己前面与多少个比自己高的人,以便于明天恢复到今天的顺序。
但是,粉丝们或多或少都是有些失望的,失望使她们晕头转向、神魂颠倒,已经分不清楚哪一边是“前面”了,于是她们可能是记住了前面比自己高的人的个数,也可能是记住了后面比自己高的人的个数,而且他们不知道自己记住的是哪一个方向。
nodgd觉得,即使这样明天也能恢复出一个排队顺序,使得任意一个人的两个方向中至少有一个方向上的比他高的人数和他记住的数字相同。可惜n比较大,显然需要写个程序来解决,nodgd很忙,写程序这种事情就交给你了。

Solution

这题很水,但为什么要写?
身高从小到大加入,然后对于一个人就贪心一下前面比他高的人有多少,于是线段树随便维护。
身高从大到小加入,我们发现对于一个人不能确定他的位置,只能确定相对顺序。于是用链表维护是 n2 的。考虑怎么优化,我们肯定可以维护一个块状链表,或者跳表
或者用以中序遍历为序列顺序的平衡树,于是就可以打splay
数据结构小集中吧。

Code

不放了,自行YY。

posted @ 2017-11-06 22:50  sadstone  阅读(28)  评论(0编辑  收藏  举报