#CF4065. 计算矩形

计算矩形

题目描述

你有 nn 个矩形,第 ii 个矩形具有高度 hih_i 和宽度 wiw_i

我们向您询问许多次有关成对的大小矩形的高和宽 hs,ws,hb,wbh_s,w_s,h_b,w_b 的问题。(高=height,宽=width,小=small,大=big,熟悉英文的话,很多记号都很好记)

对于每个询问,你需要找出前述 nn 个矩形中既能装下高度为 hsh_s 宽度为 wsw_s 的矩形,又能被装进高度为 hbh_b 宽度为 wbw_b 的矩形的矩形,输出这些矩形的面积和。换句话说,每次查询会给你 hs,ws,hb,wbh_s,w_s,h_b,w_b,你需要输出 i=1nhiwi∑_{i=1}^n h_i⋅w_i,求和号内的 ii 需满足 hs<hi<hbws<wi<wbh_s<h_i<h_b,w_s<w_i<w_b

简而言之,你一开始有 nn 个矩形,然后每次询问给你一对矩形,一大一小。问你:之前的 nn 个矩形有哪些能装入这一大一小的矩形,请输出他们的面积和。

请注意,如果两个矩形具有相同的高度或相同的宽度,则它们不能相互装入。还要注意,不能旋转矩形。

某些测试用例的答案可能超过 3232 位整数类型,因此您应该在编程语言中至少使用 6464 位整数类型。

输入格式

输入的第一行包含整数 t(1t100)t(1≤t≤100) 代表测试用例数。

每个测试用例的第一行是两个整数 n,q(1n1051q105)n,q(1≤n≤10^5,1≤q≤10^5) 代表您拥有的矩形数和查询数。

然后是 nn 行,每行包含两个整数 hi,wi(1hi,wi1000)h_i,w_i(1≤h_i,w_i≤1000) 代表第 ii 个矩形的高度和宽度。

然后是 qq 行,每行包含四个整数 hs,ws,hb,wb(1hs<hb10001ws<wb1000)h_s,w_s,h_b,w_b(1≤h_s<h_b≤1000,1≤w_s<w_b≤1000) 依次代表每个查询。

所有测试用例中 qq 的总和不超过 10510^5,所有测试用例的 nn 的总和不超过 10510^5

输出格式

对于每个测试用例,输出 qq 行,第 ii 行包含第 ii 个查询的答案。

测试样例

3
2 1
2 3
3 2
1 1 3 4
5 5
1 1
2 2
3 3
4 4
5 5
3 3 6 6
2 1 4 5
1 1 2 10
1 1 100 100
1 1 3 3
3 1
999 999
999 999
999 998
1 1 1000 1000
6
41
9
0
54
4
2993004

样例说明

image

在第一个测试用例中,只有一个查询。给出的小矩形为 1×11×1,大矩形为 3×43×4。我们需要在之前给出的 n=2n=2 个矩形中找到所有可以装下 1×11×1 的矩形(黑色),并且可以被装进 3×43×4 的矩形(黑色)的矩形的面积和。

题目共给出了两个矩形,只有 2×32×3 矩形(蓝色)可行,因为 1<21<2(高度)和 1<31<3(宽度),所以 1×11×1 的矩形可以装入小矩形内部,2<32<3(高度)和 3<43<4(宽度),因此可以被装入大矩形内部。

3×23×2 矩形(绿色)太高,无法被装入 3×43×4 的大矩形。

总面积为 2×3=62×3=6