题目背景
试题来源:https://koi.or.kr/archives/。中文翻译做了少量本土化修改。
按照署名—非商业性使用—相同方式共享 4.0 协议国际版进行授权。
题目描述
KOI 国是一个由 N 个村庄构成的国家,这些村庄分布在数轴上。其中第 i 个村庄(1≤i≤N)位于位置 xi,并有 ai 名居民。不会有两个不同村庄位于相同的位置。
KOI 国计划召开一场所有国民都要参加的大会。为此,所有人需要前往会议举办地点,所有人前往该地点所需的移动距离之和称为“累计距离”,我们用 f(x) 表示当会议举办地点为 x 时的累计距离。
住在第 i 个村庄的人前往位置为 x 的会议地点时,需要移动的距离为 ∣xi−x∣。由于第 i 个村庄有 ai 名居民,因此该村居民所需的总移动距离为 ai×∣xi−x∣。
将所有村庄的该值加总,即可得到在位置 x 举办会议时的累计距离:
f(x)=i=1∑Nai×∣xi−x∣
例如,若村庄的位置为 x1=1、x2=3、x3=6,各村庄的居民数分别为 a1=2、a2=1、a3=3,当会议地点为 x=4 时,累计距离为:
$$f(4) = 2 \times |1 - 4| + 1 \times |3 - 4| + 3 \times |6 - 4| = 13
$$
KOI 国已经准备了 Q 个会议地点候选位置。第 j 个候选位置(1≤j≤Q)为 qj。多个候选位置之间不会重复,但候选位置可能与某个村庄位置相同。
请编写程序,计算每一个候选会议地点 qj 的累计距离 f(qj)。
输入格式
第一行包含两个整数 N 和 Q,用一个空格隔开。
接下来的 N 行,每行包含两个整数 ai 和 xi,表示每个村庄的居民人数及其位置。
接下来的 Q 行,每行一个整数 qj,表示一个候选会议地点的位置。
输出格式
输出 Q 行。第 j 行输出会议地点为 qj 时的累计距离 f(qj)。
3 1
2 1
1 3
3 6
4
13
4 5
3 -4
1 -10
2 11
4 6
6
-5
1
-12
14
56
84
66
144
116
提示
约束条件
- 1≤N≤200000
- 对于所有 i(1≤i≤N),1≤ai≤1000
- 对于所有 i,−109≤xi≤109
- 1≤Q≤200000
- 对于所有 j,−109≤qj≤109
- 对任意 1≤i1<i2≤N,xi1=xi2(村庄位置各不相同)
- 对任意 1≤j1<j2≤Q,qj1=qj2(候选位置各不相同)
- 所有给定数值均为整数
子任务
- (9 分)N,Q≤5000
- (21 分)对所有 i,满足 1≤xi≤200000,且对所有 j,满足 1≤qj≤200000
- (25 分)对所有 i,ai=1
- (45 分)无额外约束条件