蒟蒻刚接触离散化,代码如下
#pragma GCC optimize(2)
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
#define re register int
#define lei_yu main
const int N=2e5+5;
int n,m,cnt,lan[N],cinev[N],cines[N],disc[N],ans_min,ans;
//cinema_voice cinema_subtitle discretization存储离散化前的原数据
vector<int>f;
struct Languages{
int tot;
int num;
}Rey[N];
bool cmp(Languages a,Languages b)
{
return a.tot>b.tot;
}
inline int Yao_Juntao(int x)
{
return lower_bound(disc+1,disc+cnt+1,x)-disc;
}
int lei_yu()
{
ios::sync_with_stdio(false);
memset(Rey,0,sizeof(Rey));
cin>>n;
for(re i=1;i<=n;++i)
{
cin>>lan[i];
disc[i]=lan[i];
}
cin>>m;
for(re i=1;i<=m;++i)
cin>>cinev[i];
for(re i=1;i<=m;++i)
cin>>cines[i];
sort(disc+1,disc+n+1);
cnt=unique(disc+1,disc+n+1)-disc-1;
for(re i=1;i<=n;++i)
{
lan[i]=Yao_Juntao(lan[i]);
Rey[lan[i]].num=lan[i];
++Rey[lan[i]].tot;
}
sort(Rey+1,Rey+cnt+1,cmp);
for(re i=1;i<=m;++i)
{
cinev[i]=Yao_Juntao(cinev[i]);
cines[i]=Yao_Juntao(cines[i]);
}
bool flag=false;
for(re i=1;i<=cnt;++i)
{
for(re j=1;j<=m;++j)
if(Rey[i].num==cinev[j])
{
f.push_back(j);
flag=true;
}
if(flag)break;
}
ans_min=cnt;
for(re i=0;i<f.size();++i)
for(re j=1;j<=ans_min;++j)
if(Rey[j].num==cines[f[i]])
{
ans_min=j;
ans=f[i];
break;
}
cout<<ans<<'\n';
return 0;
}
dalao帮帮我