#sZSZlydlt40x4201. 楼兰图腾
楼兰图腾
题目描述
在完成了分配任务之后,西部 314 来到了楼兰古城的西部。
相传很久以前这片土地上(比楼兰古城还早)生活着两个部落,一个部落崇拜尖刀(V),一个部落崇拜铁锹(∧),他们分别用 V 和 ∧ 的形状来代表各自部落的图腾。
西部 314 在楼兰古城的下面发现了一幅巨大的壁画,壁画上被标记出了 个点,经测量发现这 个点的水平位置和竖直位置是两两不同的。
西部 314 认为这幅壁画所包含的信息与这 个点的相对位置有关,因此不妨设坐标分别为 ,其中 是 到 的一个排列。
西部 314 打算研究这幅壁画中包含着多少个图腾。
如果三个点 满足 且 ,则称这三个点构成 V 图腾;
如果三个点 满足 且 ,则称这三个点构成 ∧ 图腾;
西部 314 想知道,这 个点中两个部落图腾的数目。
因此,你需要编写一个程序来求出 V 的个数和 ∧ 的个数。
输入格式
第一行一个数 。
第二行是 个数,分别代表 。
输出格式
两个数,中间用空格隔开,依次为 V 的个数和 ∧ 的个数。
样例
输入样例:
5
1 5 3 2 4
输出样例:
3 4
样例解释
,排列为 。
点的坐标: 1: (1,1) 2: (2,5) 3: (3,3) 4: (4,2) 5: (5,4)
V 图腾:中间点比两边低,即 且 ()。
枚举中间点 :
- ():左边小于它的有 个(),右边小于它的有 个(),不能构成 V(要求中间低)。
- ():左边大于它的有 个(),右边大于它的有 个(),可以构成 个 V。
- ():左边大于它的有 个(),右边大于它的有 个(),可以构成 个 V。
V 总数 = 。
∧ 图腾:中间点比两边高,即 且 ()。
枚举中间点 :
- ():左边小于它的有 个(),右边小于它的有 个(),可以构成 个 ∧。
- ():左边小于它的有 个($y=1,? 注意 y=5>3 不算),所以是 个(),右边小于它的有 个(),可以构成 个 ∧。
- ():左边小于它的有 个(),右边小于它的有 个( 右边 ,没有小于它的),所以为 。
- ():左边小于它的有 个(),右边没有,所以为 。
∧ 总数 = ?不对,样例输出是 。可能漏算 或 ?中间点 必须左右都有点,所以 和 不考虑。
重新计算: :左边小于它的:1 → 1 个;右边小于它的:3,2 → 2 个,所以 ∧ 数 = 。 :左边小于它的:1 → 1 个;右边小于它的:2 → 1 个,所以 ∧ 数 = 。 :左边小于它的:1 → 1 个;右边小于它的:无,所以 。 总计 ,与样例 不符。
检查 V: :左边大于它的:5 → 1 个;右边大于它的:4 → 1 个,V 数 = 。 :左边大于它的:5,3 → 2 个;右边大于它的:4 → 1 个,V 数 = 。 总计 ,与样例一致。
那么 ∧ 应该为 ,可能 也算?但 右边没有点,不能作为中间点。
实际上 ∧ 的个数为:对于每个位置 ,左边比 小的个数 × 右边比 小的个数?不对,∧ 要求中间高,即 且 ,所以是左边比 小的个数 × 右边比 小的个数。
计算: :左边无,不考虑。 :左边比 小:1 → 1 个;右边比 小:3,2,4 中的 3,2,4 都比 5 小?3<5, 2<5, 4<5,所以是 3 个?之前错误看成右边比它小的只有 3,2,漏了 4?但 4 在右边,且 4<5,所以右边有 3 个比它小。那么 ∧ 数 = 。 :,左边比它小:1 → 1 个;右边比它小:2 → 1 个,所以 。 :,左边比它小:1 → 1 个;右边比它小:无(4>2),所以 。 :不考虑右边。
总计 ,与样例一致。
所以正确算法:
V 数 = 对于每个 ,左边比 大的个数 × 右边比 大的个数。
∧ 数 = 对于每个 ,左边比 小的个数 × 右边比 小的个数。
数据范围
- 输出答案不超过
int64 - 是 到 的一个排列
时空限制
- 时间限制:1 秒
- 空间限制:64 MB