离散化:

void discrete(){ //离散化
    sort(a+1,a+1+n);
    for(int i=1;i<=n;i++) 
        if(i==1||a[i]!=a[i-1])
            b[m++]=a[i];
}
int query(int x){ // x映射的为1~m之间的哪一个整数
    return lower_bound(b+1,b+1+n,x)-b; //二分查找
}
#include<iostream>
#include<algorithm>
using namespace std;
const int N=200005;
int a[N],b[N],c[N];
int d[3*N],e[3*N],sum[3*N];
int n,m,cnt=1,cntt=1;
void discrete(){
    sort(d+1,d+cnt);
    for(int i=1;i<cnt;i++)
        if(i==1||d[i]!=d[i-1])
            e[cntt++]=d[i];
}
int query(int x){
    return lower_bound(e+1,e+cntt,x)-e;
}
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        d[cnt++]=a[i];
    }
    cin>>m;
    for(int i=1;i<=m;i++){
        cin>>b[i];
        d[cnt++]=b[i];
    }
    for(int i=1;i<=m;i++){
        cin>>c[i];
        d[cnt++]=c[i];
    }
    discrete();
    for(int i=1;i<=n;i++){
        int id=query(a[i]);
        sum[id]++;
    }
    int maxb=-1,maxc=-1,ans=0;
    for(int i=1;i<=m;i++){
        int x=query(b[i]);
        int y=query(c[i]);
        if(sum[x]>maxb){
            maxb=sum[x];
            maxc=sum[y];
            ans=i;
        }else{
            if(sum[x]==maxb&&sum[y]>maxc){
                maxb=sum[x];
                maxc=sum[y];
                ans=i;
            }
        }
    }
    cout<<ans<<endl;
    return 0;
}  
  • AcWing104 货仓地址
    https://www.acwing.com/problem/content/106/
    #include<iostream>
    #include<algorithm>
    using namespace std;
    int a[100005];
    int main(){
      int n,zb;
      cin>>n;
      for(int i=1;i<=n;i++)
          cin>>a[i];
      if(n%2!=0)
          zb=(n+1)/2;
      else 
          zb=n/2;
      sort(a+1,a+1+n);
      int aa=a[zb];
      for(int i=1;i<=zb;i++)
          a[i]=aa-a[i];
      for(int i=zb+1;i<=n;i++)
          a[i]=a[i]-aa;
      long long ans=0;
      for(int i=1;i<=n;i++)
          ans+=a[i];
      cout<<ans; 
      return 0;
    }