seuOJ577 - 无聊的猪宝宝
- 题目类型:传统
- 输入文件:标准输入流
- 输出文件:标准输出流
- 时间限制:1000 ms
- 空间限制:256 MiB
- 题目标签:Div.1, 2025 帆软杯
题目描述
无聊的猪宝宝有一个长度为 n 的整数序列 a1,a2,⋯,an。
它想将其划分成若干段,设为 [l1,r1],[l2,r2],⋯,[lm,rm](m 自行决定),满足:
- l1=1,rm=n。对于任意整数 i∈[1,m],li≤ri,若 i=m 则 ri+1=li+1。
- 以下两个条件中至少有一个成立:
- 条件 A:对于任意整数 i∈[1,m],都有 ali≤ali+1≤⋯≤ari。
- 条件 B:对于任意整数 i∈[1,m],都有 ali≥ali+1≥⋯≥ari。
求满足上述要求的划分方案的个数。答案对 109+7 取模。
输入格式
第一行一个整数 n(1≤n≤105),表示序列的长度。
第二行 n 个整数 a1,a2,⋯,an(1≤ai≤109)。
输出格式
一行一个整数,表示答案对 109+7 取模后的结果。
样例
样例 1
输入
输出
解释
可以用两个集合的容斥原理来计算这个样例的答案。
把 a1,a2,⋯,a6 划分成 m 段,相当于从 5 个邻项之间的间隙中选 m−1 个插入隔板。
要使条件 A 成立,必须且只需在 a3 与 a4 之间、a5 与 a6 之间插入隔板,可得方案数为 23=8。
要使条件 B 成立,必须且只需在 a1 与 a2 之间、a2 与 a3 之间插入隔板,可得方案数为 23=8。
要使两者同时成立,同理可得方案数为 2。
所以,答案是 8+8−2=14。
样例 2
输入
12
1 1 2 3 2 2 1 9 1000000000 23 24 25
输出