题目描述
rs少爷正在思考一个经典问题:有n个数,怎样找出这n个数中出现次数最多的数?n可能很大,计算机并不能将这n个数同时读取到内存中。而且数的范围只限制是正整数,并不限制大小,这意味并不能使用基数排序来解决这个问题。
rs少爷的队友给出了下面这种解法:分块处理,将n个数分为m块,每块k个数。计算机每次读取k个数,将这k个数中出现次数最多的数和它出现的次数记录为这块数据的结果。当m块都计算完成后,再根据这m块的结果,计算n个数中出现次数最多的数。
聪明的rs少爷一眼就发现了这种做法的问题,这种做法并不能保证一定正确,在一些数据下,这种做法给出的答案是错误的。相信聪明的你也发现了,所以,你能根据各个分块的结果,判断rs少爷的队友给出的结果是否是一定正确的吗?
输入
多实例,实例数<=5。
输入第一行包含两个整数n, m (1<=n<=1014, 1<=m<=105)。保证n%m == 0。
接下来m行,每行两个整数ai, bi(1<=ai<=106, 1<=bi<=n/m)。ai代表这一个分块中出现次数最多的数,bi代表它出现的次数(可能是因为命运吧,每个分块中出现次数最多的数总是唯一的,而且这个数都在[1, 106]内)。
接下来包含一个整数ans。代表rs少爷的队友给出的结果。
保证所有实例m的和小于等于105。
输出
每个实例输出一行。如果rs少爷的队友给出的结果一定是正确的(当有多个数出现次数最多,输出任意一个就认为是正确的),输出“YES”;否则,输出“NO”。
6 2
2 2
3 3
3
9 3
1 3
2 2
2 2
2