#P3683. [CERC2016] 地理哈希网格 Geohash Grid

[CERC2016] 地理哈希网格 Geohash Grid

说明

“地理哈希”是一个将二维平面坐标编码为整数的过程,这将为数据库中地理数据的存储和查询带来方便。在这个问题中,一个地图是一个建立在标准二维笛卡尔坐标系上的 2n2^n2n2^n 列的矩形网格,越往右 xx 坐标越大,越往上 yy 坐标越大。一个地图格子是一个单位正方形,满足其左下角的点的坐标为 (x,y)(x,y),其中 0x,y<2n0 \le x,y<2^n

2n2^n2n2^n 列的地图上一共有 22n2^{2n} 个格子。对于一个格子 cc,它的地理哈希值 h(c)h(c) 是一个 2n2n 位的非负二进制整数。从最高位开始考虑整个地图,然后重复下面两个步骤 nn 次,即可得到 cc 的地理哈希值 h(c)h(c)

  1. 把地图分成左右两个面积相等的区域,如果格子 cc 在左半边,那么这一位是 00,否则是 11。然后将考虑范围缩小到 cc 所在的那半边地图。
  2. 把地图分成上下两个面积相等的区域,如果格子 cc 在下半边,那么这一位是 00,否则是 11。然后将考虑范围缩小到 cc 所在的那半边地图。

一个“地理哈希区间” [a,b][a,b] 表示所有哈希值在 [a,b][a,b] 之间的格子。通常应用中,我们会用一些地理哈希区间去近似表示地图。给定一个格子集合 CC,以及一个正整数 tt,那么 CC 的最优 tt 近似是指使用不超过 tt 个地理哈希区间,覆盖住所有 CC 中的格子(覆盖其它格子是允许的),同时满足覆盖住的区域的面积最小。

给定一个地图以及一个格子集合 CCCC 用一个边平行于坐标轴的简单多边形来表示。然后给定 qq 个询问 t1,t2,,tqt_1,t_2,\cdots,t_q,对于每个询问 tkt_k,你需要求出 CC 的最优 tkt_k 近似覆盖住的区域的面积。

输入格式

第一行包含一个正整数 n(1n30)n(1 \le n \le 30),表示地图的尺寸的以 22 为底的对数。

第二行包含一个正整数 m(4m200)m(4 \le m \le 200),表示多边形顶点的个数。

接下来m行,每行两个整数 xi,yi(0xi,yi2n)x_i,y_i(0 \le x_i,y_i \le 2^n),按逆时针依次表示多边形每个顶点的坐标。

输入数据保证多边形不自交,边平行于坐标轴,且不存在相邻两条边是平行的。

接下来一行包含一个正整数 q(1q100000)q(1 \le q \le 100000),表示询问的个数。

接下来 qq 行,每行一个正整数 t1,t2,,tq(1ti109)t_1,t_2,\cdots,t_q(1 \le t_i \le 10^9),依次表示每个询问。

输出格式

输出 qq 行,每行一个正整数,依次回答每个询问。

3 8
1 1
5 1
5 4
3 4
3 8
0 8
0 5
1 5
4 2 3 5 7
32
30
26
24

提示

区间 [3,29][3,29][33,33][33,33][36,37][36,37] 组成最优 33 近似,其覆盖住的总面积为 3030