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