先用哈希表统计数组每个值出现次数 freq[v](数组已排序但不影响,用哈希更快)。
对每个询问:
(x=0):(0^K=0)((K>=1)),所以只可能是 (a=y)
总数=峰值=freq[y](x=1):(1^K=1),所以只可能是 (a=y+1)
总数=峰值=freq[y+1](x>=2):(x^K) 严格递增,只需枚举 (K=1,2,3......),不断乘 (x) 得到幂 p:服务器常用指数退避策略来避免网络拥塞,每次访问失败后,会大间隔间隔成倍后再访问,下次重试的间隔在最大间隔内随机化。小华作为测试人员模拟了一些输入,服务器后台可看到n个访问时间点,第i个为a[i](其中a[i]值可能重复)。现在他想知道对于一个数对(x[j],y[j]),满足a[i]=(x[j])K+y[j]的访问一共有多少个,峰值是多少?
注:K看可取任意正整数,峰值指K取某一整数时满足a[i]=(x[j])K+y[j]的数量的最大访问个数。
第1行两个整数n,m,用空格隔开。表示有n个数,m次询问(1<=n<=100000,1<=m<=200000)。
第2行有n个数,用空格隔开,第i个数为a[i](1<=i<=n,1<=a[i]<=1000000000),从小到大排序。
从第3行到第m+2行,每行两个整数,用空格隔开,表示给定一个整数数对(x[j],y[j])(0<=x[i],y[j]<=10000000)
m行,每行两个数,第j行回答询问对于(x[j],y[j]),可满足a[i]=(x[j])K+y[j](K取任意正整数)的数量一共有多少个,峰值为多少,用空格隔开。
输入
4 2
45 78 90 429981774
12 78
9 42561285
输出
2 1
1 1
说明
对于第一组询问,要满足a[1]=12K+78,当K取1.8时121+78=90=a[3],此时刻有1个访问。
128+78=429981774=a[4],此时刻有1个访问。因此一共2个,峰值为1。
对于第二组询问,要满足a[i]=9K+42561285,当K取9时99+42561285=429981774=a[4]。因此一共1个,峰值为1。
输入
11 3
2 3 4 5 5 6 7 7 9 16 17
2 0
2 1
0 7
输出
3 1
5 2
2 2
说明
对于第一组询问要满足a[1]=2K+0,当K取1,2,4时:
21+0=2=a[1],此时刻有1个访问
22+0=4=a[3],此时刻有1个访问
24+0=16=a[10],此时刻有1个访问
因此一共3个,蜂值为1。
对于第二组询问,要满足a[1]=2K+1的a[1],当K取1,2,3,4时:
21+1=3=a[2],此时刻有1个访问
22+1=5=a[4]=2[5],此时剪有2个访问
23+1=9=[9],此时充有1个访问
24+1=17=a[11],此时完有1个访问
因此一共5个,峰值为2
对于第三组询问要满足a(1)=0K+7的a抑,值只能为7。a[7]=a[8]=7,有两个数满足因此一共2个,峰值为2