U516078 最长上升子序列计数

题目描述

给你一个长度为 $n$ 的序列 $a_1\sim a_n$,请你求出该序列中有多少个不同的最长上升子序列(两个子序列 $x$ 和 $y$ 不同当且仅当 $x$ 和 $y$ 在原序列中的下标集合不同 )。 定义一组序列 $b_1\sim b_m$ 是 $a_1\sim a_n$ 的子序列当且仅当 $b$ 可以通过 $a$ 删除若干个元素(也可以不删)后剩下的元素保持相对顺序不变形成。 例如:序列 $a=[1,2,3,4,5]$,序列 $b=[2,4,5]$ 是 $a$ 的子序列。

输入格式

第一行一个整数 $n(1\le n\le 5000)$。 第二行 $n$ 个整数 $a_1\sim a_n(1\le a_i\le 10^9)$。

输出格式

一行一个整数,表示最长上升子序列的个数(输出答案对 $10^9+7$ 取模的结果)。

说明/提示

符合要求的子序列有: $$ [3,4,5]\\ [2,4,5] \\ [1,4,5] \\ [2,3,5] \\ [1,3,5] $$