| “华为杯”2025 年广东工业大学 ACM 程序设计竞赛 |
|---|
| Finished |
塑料因为滥用 partition_point 被打入了二分炼狱,橘猫大人给他分配的第一个工作是 "给定一个正整数序列,询问下标查找右边第一个比它大/小的数字"。
"这不是我们 2023 新生月赛的题目吗,下次记得标明出处",塑料洋洋洒洒地写了个线段树上二分(尽管这次并不需要修改)交了上去。
然而没过几天,橘猫发现塑料的代码出锅了。愤怒的橘猫给塑料发布了他的第二个工作:
定义一个函数 $$$f(x)$$$,它的工作方式是按顺序执行
塑料随便一想就想出了 $$$f(x)$$$ 的求法,然而橘猫大人让塑料别得意得太早,因为他希望对于每一个 $$$i$$$ ($$$1 \le i \le n$$$) 都要求出 $$$f(i)$$$ 的值。
汗流浃背的塑料发现时限只有 1ms,他找到了v2x1求他帮忙卡卡常数。v2x1一边流汗一边跟橘猫商量,最后橘猫同意塑料只需要在两秒内搞定。
然而就算如此塑料还是不会做,所以他来找你了,请你帮帮他吧。
第一行输入一个正整数 $$$n$$$ $$$(1 \leq n \leq 2 \times 10^5)$$$
接下来输入 $$$n$$$ 个正整数 $$$a_1,a_2,\dots,a_n$$$ $$$(1 \leq a_i \leq 10^9)$$$,表示塑料需要处理的序列。
设 $$$b_i$$$ 为第 $$$i$$$ 个元素带入 $$$f(x)$$$ 的返回值,你需要输出一个长度为 $$$n$$$ 的正整数序列 $$$b_1,b_2,...,b_n$$$,元素之间用空格隔开。
61 1 4 5 1 4
4 4 6 0 4 0
样例解释:
对于第一个元素,第一个比它大的数是 $$$4$$$,而之后就没有比 $$$1$$$ 小的数字了,所以 $$$b_1 = 4$$$。
对于第三个元素,第一个比它大的数是 $$$5$$$,接下来比它小的第一个数字是 $$$1$$$,所以 $$$b_3 = 5 + 1 = 6$$$。
| Name |
|---|


