五一纪念题解(其实是没事开了道题hh
分析
就是离散化的基本操作:
+ 把出现的数全部丢入 vector
中
+ 然后排序,使用 unique
和 erase
去重
+ 写下 find
函数,将离散的数映射成稠密的。
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5;
vector<int> v;
int rec[N], a[N], b[N];
int buc[3*N];
int find(int val){
return lower_bound(v.begin(), v.end(), val)-v.begin();
}
int main(){
int n; cin>>n;
for(int i=1; i<=n; i++){
cin>>rec[i];
v.push_back(rec[i]);
}
int m; cin>>m;
for(int i=1; i<=m; i++){
cin>>a[i];
v.push_back(a[i]);
}
for(int i=1; i<=m; i++){
cin>>b[i];
v.push_back(b[i]);
}
sort(v.begin(), v.end());
v.erase(unique(v.begin(), v.end()), v.end());
for(int i=1; i<=n; i++) buc[find(rec[i])]++;
int res, cnt1=0, cnt2=0;
for(int i=1; i<=m; i++)
if(buc[find(a[i])]>cnt1) res=i, cnt1=buc[find(a[i])], cnt2=buc[find(b[i])];
else if(buc[find(a[i])]==cnt1 && buc[find(b[i])]>cnt2) res=i, cnt2=buc[find(b[i])];
cout<<res<<endl;
return 0;
}