给定是一个 1∼n 的排列。设全局最长上升子序列(LIS)长度为 L。 对每个位置 i,我们只需统计:有多少条 LIS 会“经过”元素 ai。
经典分解法:
Lend[i]
:以位置 i
结尾的最长上升子序列长度;CntL[i]
:达到 Lend[i]
的方案数;Rbeg[i]
:从位置 i
开始(包含 i
)的最长上升子序列长度(向右);给定一个长为n 的排列 {a}。排列是指,{a} 包含1~n中的所有元素恰好一次。
回顾一下,{a} 的一个子序列是指从{a}中将若干元素(不一定连续)提取出来而不改变相对位置形成 的序列。 对于 {a} 的一个子序列 {b},如果 {b} 中的元素单调递增,就称{b}是{a}的一个上升子序列。 对于{a}的一个上升子序列{c},如果找不到比{c}元素个数更多的上升子序列了,就称 {c} 是 {a} 的 一个最长上升子序列。显然,{a} 可以有很多个最长上升子序列。 请你对每个i∈[1,n],求出有多少个不同的{a}的最长上升子序列包含ai。
第一行一个正整数n
第二行n个正整数,以空格分隔,表示a1,a2,...,an
保证 {a} 是一个 1~n 的排列。 1≤n≤2×105
输出 n 行,每一行一个非负整数。第i行的输出表示包含a 的最长上升子序列个数。
因为答案可能很大,所以你只需要输出答案对998244353取模的结果。
输入
5
3 1 4 2 5
输出
1
2
2
1
3
对于输入的排列,其最长上升子序列长度为3,所有不同的最长上升了序列如下:
以 a1和 a2为例。 包含了a1=3的最长上升子序列有1个,故答案为1。 包含了a2=1的最长上升子序列有2 个,故答案为2。