问题 A: RS哥哥的分块

问题 A: RS哥哥的分块

时间限制: 2Sec 内存限制:128 MB
提交:258 解决:11
[ 状态] [ 讨论版] [ 提交] [命题人: ]
题目描述
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”。
样例输入 Copy
6 2 2 2 3 3 3 9 3 1 3 2 2 2 2 2
样例输出 Copy
YES NO