温暖(warmth)

小S面对一个冻结的排列,每次解冻一个元素,需要找出每次操作后的最长上升子序列长度。输入包括排列长度和解冻顺序,输出是每次解冻后的最长上升子序列长度。此问题可以通过O(nlogn)的最长上升子序列算法解决,并且有结论表明序列的期望最长上升子序列长度为n。
摘要由CSDN通过智能技术生成

【题目背景】
小S 是一个很喜欢排列的女孩子。
【题目描述】
给出一个长度为n 的排列,由于天气太冷了,最开始所有元素都是被冻住的。
小S 每次会解冻一个位置的元素,她想知道此时该序列的最长上升子序列的长度
是多少。
【输入格式】
从文件warmth.in 中读入数据。
第一行包含一个正整数n ,表示排列长度。
第二行包含n 个不同的正整数p1, p2, …, pn,表示给定的排列。
第三行包含n 个不同的正整数k1, k2, …, kn,其中第i 个元素ki 表示第i 次操作解
冻了pki 。
【输出格式】
输出到文件warmth.out 中。
输出一行n 个正整数,表示每次解冻操作后的最长上升子序列的长度。
【样例1 输入】
8
7 1 8 3 2 4 6 5
1 7 4 5 8 2 6 3
【样例1 输出】
1 1 2 2 2 3 4 4
【样例2】
见选手目录下的warmth/warmth2.in 与warmth/warmth2.ans。
题解:
首先,需要知道一种最长上升子序列的 O ( n l o g n ) O(nlogn) O(nlogn)做法。
即为考虑贪心,维护当前每种长度的最小结尾数字。
又因为贪心这种定义,所以每个数字只能更新它的前驱。二分查找即可。
至于方案数,可以记录每个数字更新的位置。便利完一边后倒序查找一个递减序列就是一组解了。
同时,介绍一个神奇的结论:一个序列的期望最长上升子序列的长度为 n \sqrt n n
即只有 1 n \frac{1}{\sqrt n} n

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值