【6月2日测试8】数据整理
题号:NC26122
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

** 请注意此题内存限制与其他题目不同!**

Rikka 是一个乐于助人的女孩子,她经常帮助她的老师整理同学的成绩。

Rikka 所在的班级一共有 n 个人,在一次考试过后,Rikka 从老师那里得到了全班同学的成绩。

Rikka 按照学号帮助老师整理好了这些成绩,但是她的老师在给全班同学的成绩排名之后又提出了新的问题:他想要知道学号在 [l, r] 区间内同学中,在全班的排名在 [s, t] 区间内的人数。

这时候 Rikka 就傻眼了,因为她并不知道怎么做。

你能帮助 Rikka 解决这个问题吗?

请结合样例解释来更好地理解这个问题。

** 请注意:在本题中所有的“排名”指的是从小到大的排名。**

输入描述:

输入包含若干行。

第一行为两个整数 n 和 q,表示全班同学的人数和老师提出的询问个数。

第二行包含 n 个整数 a_1 - a_na_i 表示学号为 i 的同学的成绩。

接下来有 q 行,每行包含 4 个整数 l, r, s, t,表示这一个询问中学号的区间 [l,r] 和排名的区间 [s, t]。

输出描述:

输出包含若干行。

对于每一个询问,输出一行一个整数,表示这个询问的答案。
示例1

输入

复制
5 3
93 92 95 94 81
1 5 2 3
2 5 1 3
2 4 3 5

输出

复制
2
2
2

说明

### 样例解释

容易发现,在这个样例中,所有人的排名分别为 3, 2, 5, 4, 1。

第一个询问求学号在 [1, 5] 区间中即所有同学中排名在 [2, 3] 中的人数,答案显然为 2。

第二个询问求学号在 [2, 5] 区间中排名在 [1, 3] 中的人数,其中,学号为 2 的同学排名为 2,学号为 5 的同学排名为 1,不符合要求,所以答案为 (5 - 2 + 1) - 2 = 2。

第三个询问求学号在 [2, 4] 区间中排名在 [3, 5] 中的人数,其中,学号为 2 的同学排名为 2 不符合要求,答案为 (4 - 2 + 1) - 1 = 2。

备注:

用 m 表示所有在询问中出现的不同的 s 和 t 的总个数。
对于所有的测试数据,保证 并且所有的 a_i 互不相同。