一些城市沿着一条笔直的公路建造。
这些城市从左到右编号为
有 个
对于每个 巴士,我们知道它服务的城市范围:第
个
巴士为编号为
和
之间的城市(包含
和
)提供服务。
现在给定你一个城市子集 。
对于 中包含的每一座城市,我们需要找出有多少辆
输入格式
第一行包含整数 ,表示共有
每组数据第一行包含整数 ,表示
第二行包含 个整数,形式为
,其中第 i 个
巴士服务于编号从
到
(包括)的城市。
第三行包含整数 ,表示询问的城市数量。
接下来 行,每行包含一个整数
,表示一个询问城市的编号。
每组数据之前隔一个空行。
输出格式
每组数据输出一个结果,每个结果占一行。
结果表示为 Case #x: y
,其中 是组别编号(从
开始),
是
个空格隔开的整数,其中第
个整数是为城市
提供服务的
数据范围
输入样例:
2
4
15 25 30 35 45 50 10 20
2
15
25
10
10 15 5 12 40 55 1 10 25 35 45 50 20 28 27 35 15 40 4 5
3
5
10
27
输出样例:
Case #1: 2 1
Case #2: 3 3 4
样例解释
在样例#1
中,有四个
第一个服务城市 到
,第二个服务城市
到
,第三个服务城市
到
,第四个服务城市
到
。
城市 由第一个和第四个
巴士服务,城市
仅由第一个
巴士服务,因此答案输出为
2 1
。
#include<iostream>
#include<cstring>
using namespace std;
const int N = 5010;
int n;
int q[N];
void insert(int l, int r, int w){
if(l > r) swap(l, r);
q[l] += w;
q[r + 1] -= w;
}
int main(){
int t;
cin >> t;
for(int l = 1; l <= t; l++){
printf("Case #%d: ", l);
memset(q, 0, sizeof q);
cin >> n;
int a, b;
for(int i = 0; i < n; i++)
cin >> a >> b, insert(a, b, 1);
for(int i = 1; i < N; i++)
q[i] += q[i - 1];
int k;
cin >> k;
for(int i = 0; i < k; i++){
cin >> a;
cout << q[a] << ' ';
}
cout << endl;
}
return 0;
}