【题目描述】
雷雷对乐器最有研究了,他经常去听音乐会,研究各种乐器的搭配使用会产生什么效果,但是很可惜,前些天举办的一次音乐会被雷雷miss掉了,他只能去问他的朋友们有谁听了那场音乐会,然后给他讲述讲述。
但他的朋友们跟他的爱好不一样,他的朋友们去听音乐会都出于学习其中的一种乐器去的,所以摆在雷雷面前的就是一个很严峻的任务,他要调查若干个人,通过他们的描述来复原音乐会,从而进行自己的研究。
其中乐器最多只有5种
其中包括:
‘P’ : Piano 钢琴
‘V’ : Violin 小提琴
‘C’ : Clarino 小号
‘D’ : Drum 鼓
‘B’ : Bass 贝司
他的每个朋友会告诉他一条信息即:从hh:mm:ss到h’h’:m’m’’s’有哪种乐器在演奏。
其中对于某一个hh:mm:ss它所代表的含义为从时刻hh:mm:ss到时刻hh:mm:ss+1 的这一秒时间。音乐会是从00:00:00开始。
【输入】
第一行为一个整数n,表示雷雷所询问的朋友数
接下来n行 每行会以hh:mm:ss h’h’:m’m’’s’ T的形式读入。 T代表乐器种类。
第n + 1行读入一个整数m,表示雷雷想知道的时刻总数。
接下来m行 每行会以hh:mm:ss形式读入。
【输出】
共有m行 每行输出一些字母,表示在所对应的hh:mm:ss时,有哪些乐器在演奏。
其中,可能同时演奏的乐器不止一种,所以请按PVCDB的顺序输出(全部使用大写字母,且中间不要添加空格),如果当前时刻没有乐器在演奏,那么输出None
【输入样例】
5
00:00:02 00:00:05 P
00:00:09 00:00:09 V
00:00:04 00:00:07 P
00:00:01 00:00:02 V
00:00:05 00:00:06 V
6
00:00:00
00:00:02
00:00:04
00:00:10
00:00:09
00:00:06
【输出样例】
None
PV
P
None
V
PV
【提示】
[数据规模]
对于30%的数据 hh:mm:ss满足 hh=0 0≤mm≤59 0≤ss≤59 1≤n, m≤200
对于100%的数据 hh:mm:ss满足0≤hh≤9 0≤mm≤59 0≤ss≤59 1≤n, m≤20000
【注意】
1.在评测过程中,评测程序会严格区分大小写。
2.某两位朋友所提供的资料可能会出现重叠。
#include
#include
#include
using namespace std;
const int N = 40000 + 10;
char s[20];
int Mtime = -1;
struct node
{
int tr[N * 10];
#define lowbit(x) x & -x
void add(int x)
{
for(int i = x;i <= N ; i += lowbit(i)) tr[i]++;
}
int query(int x)
{
int res = 0;
for(int i = x; i ;i -= lowbit(i)) res += tr[i];
return res;
}
};
struct instru
{
node s,t;
void add(int l,int r)
{
s.add(l),t.add(r);
}
int query(int x)
{
return s.query(x) - t.query(x - 1);
}
}P,V,C,D,B;
int n,m;
int l ,r;
char op[3];
int ask;
int inint()
{
scanf("%s",s);
int h = (s[0] - '0') * 10 + (s[1] - '0');
int m = (s[3] - '0') * 10 + (s[4] - '0');
int ss = (s[6] - '0')* 10 + (s[7] - '0');
int res = h * 3600 + m * 60 + ss + 1;
Mtime = max(Mtime,res);
return res;
}
int main()
{
scanf("%d",&n);
for(int i =1; i<= n; i++)
{
l =inint();
r =inint();
scanf("%s",op);
if(op[0] == 'P') P.add(l,r);
if(op[0] == 'V') V.add(l,r);
if(op[0] == 'C') C.add(l,r);
if(op[0] == 'D') D.add(l,r);
if(op[0] == 'B') B.add(l,r);
}
scanf("%d",&m);
for(int i =1; i<= m;i++)
{
ask = inint();
int flag = 0;
if(P.query(ask))
{
flag = 1;
putchar('P');
}
if(V.query(ask))
{
flag = 1;
putchar('V');
}
if(C.query(ask))
{
flag = 1;
putchar('C');
}
if(D.query(ask))
{
flag = 1;
putchar('D');
}
if(B.query(ask))
{
flag = 1;
putchar('B');
}
if(!flag) printf("None");
if(i!=m)putchar('\n');
}
return 0;
}