https://www.luogu.com.cn/problem/CF670C
WA #9, 求调
#include <bits/stdc++.h>
using namespace std;
int n, m, idx, ansi, ans1, ans2;
int a[2000010], b[2000010], c[2000010], all[6000010], d[6000010], buc[6000010];
int dic(int find)
{
int l = 1, r = idx;
while(l < r)
{
int mid = (l+r)>>1;
if(d[mid] >= find) r = mid;
else l = mid+1;
}
return l;
}
int main()
{
scanf("%d", &n);
for(int i = 1; i <= n; i++) scanf("%d", &a[i]), all[++idx] = a[i];
scanf("%d", &m);
for(int i = 1; i <= m; i++) scanf("%d", &b[i]), all[++idx] = b[i];
for(int i = 1; i <= m; i++) scanf("%d", &c[i]), all[++idx] = c[i];
// for(int i = 1; i <= idx; i++) printf("%d ", all[i]);
// printf("\n");
sort(all+1, all+1+n+m+m);
// for(int i = 1; i <= idx; i++) printf("%d ", all[i]);
// printf("\n");
idx = 0;
for(int i = 1; i <= n+m+m; i++)
if(all[i] != all[i-1]) d[++idx] = all[i];
// for(int i = 1; i <= idx; i++) printf("%d ", d[i]);
// printf("\n");
for(int i = 1; i <= n; i++) buc[dic(a[i])]++;
// for(int i = 1; i <= n+m+m; i++) printf("%d ", buc[i]);
// printf("\n");
for(int i = 1; i <= m; i++)
{
int rea = buc[dic(b[i])], lly = buc[dic(c[i])];
if(rea >= ans1 || (rea == ans1 && lly >= ans2))
ansi = i, ans1 = rea, ans2 = lly;
}
printf("%d", ansi);
return 0;
}