离散化:
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; //二分查找
}- AcWing103 电影
https://www.acwing.com/problem/content/105/
#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; }

京公网安备 11010502036488号