参考:https://blog.csdn.net/qq_42780289/article/details/91348748
题目:https://codeforces.com/contest/1514/problem/D
注意这里不能用rand(),因为rand()的随机范围小,需要使用mt19937随机数
一、rand()随机数
范围:0~32767
二、mt19937随机数
范围:无限制,但是可以自己设定。
#include<bits/stdc++.h>
using namespace std;
vector<int>q[310000];
int l,r,a[310000],n,rq;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
int main(){
ios::sync_with_stdio(false);
cin>>n>>rq;
for(int i=0;i<n;i++){
cin>>a[i];
q[a[i]].push_back(i);
}
while(rq--){
cin>>l>>r;
l--;
r--;
int gs=r-l+1;
int maxs=0;
for(int i=0;i<40;i++){
int val=a[l+rng()%gs];
int cnt=lower_bound(q[val].begin(),q[val].end(),r+1)-lower_bound(q[val].begin(),q[val].end(),l);
maxs=max(maxs,cnt);
}
cout<<max(1,maxs*2-gs)<<endl;
}
return 0;
}