求助CF670C
  • 板块学术版
  • 楼主sundyLIUXY
  • 当前回复4
  • 已保存回复4
  • 发布时间2023/3/13 17:46
  • 上次更新2023/10/23 21:40:00
查看原帖
求助CF670C
706737
sundyLIUXY楼主2023/3/13 17:46

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;
}
2023/3/13 17:46
加载中...