#include<bits/stdc++.h>
using namespace std;
#define ll long long
inline double DoubleRead()
{
long long s=0,w=1,k=0,n=0,m=0;
char ch=getchar();
while(ch<'0' ||ch>'9')
{
if(ch ='-') w=-1;
ch=getchar();
}
while((ch>='0' && ch<='9') || ch=='.')
{
if(ch=='.')
n=1;
else if(n==0)
s=s*10+ch-'0';
else k=k*10+ch-'0',m++;
ch=getchar();
}
return (pow(0.1,m)*k+s)*w;
}
inline int read()
{
int s=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')
f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
s=s*10+ch-'0';
ch=getchar();
}
return s*f;
}
// by : zplqwq
const int N=20010;
int n;
int a[N];
int m;
int x[N];
int sz=0;
int y[N];
int b[N];
int all[N];
int cnt[N];
void discrete()
{
sort(all+1,all+1+sz);
for(int i=1;i<=sz;i++)
{
if(i==1 or all[i]!=all[i-1])
{
b[++m]=all[i];
}
}
}
int query(int x)
{
return lower_bound(b+1,b+sz+1,x)-b;
}
signed main()
{
n=read();
for(int i=1;i<=n;i++)
{
a[i]=read();
all[++sz]=a[i];
}
m=read();
for(int i=1;i<=m;i++)
{
x[i]=read();
all[++sz]=x[i];
}
for(int i=1;i<=m;i++)
{
y[i]=read();
all[++sz]=y[i];
}
discrete();
for(int i=1;i<=n;i++)
{
cnt[query(all[i])]++;
}
int ans=0;
int tmp=0;
int id=1;
for(int i=1;i<=m;i++)
{
int ansx=cnt[query(x[i])];
int ansy=cnt[query(y[i])];
if(ansx>ans or ansx==ans and ansy>tmp)
{
id=i;
ans=ansx;
tmp=ansy;
// cout<<ansx<<" "<<ansy<<endl;
}
}
cout<<id<<endl;
return 0;
}
思路就是离散化。