AC代码:
转自https://blog.csdn.net/Marystl/article/details/83757233
这个好理解一些,hhh。
代码一看就能理解。
#include <bits/stdc++.h>
using namespace std;
const int maxn=2e5+5;
int ans[maxn];
struct node{
int pos,dir;
int left,right;
}d[maxn];
int main(){
int n,m; cin>>n>>m;
for(int i=0;i<n+m;i++)
cin>>d[i].pos;
for(int i=0;i<n+m;i++)
cin>>d[i].dir;
int near_dir=-1;
for(int i=0;i<n+m;i++){
if(d[i].dir) near_dir=i;
else d[i].left=near_dir;
}
near_dir=-1;
for(int i=n+m-1;i>=0;i--){
if(d[i].dir) near_dir=i;
else d[i].right=near_dir;
}
for(int i=0;i<n+m;i++){
if(!d[i].dir){
if(d[i].left==-1) ans[d[i].right]++;
else if(d[i].right==-1) ans[d[i].left]++;
else if(d[i].left!=-1&&d[i].right!=-1){
int k1=d[i].pos-d[d[i].left].pos;
int k2=d[d[i].right].pos-d[i].pos;
if(k1<=k2)
ans[d[i].left]++;
else
ans[d[i].right]++;
}
}
}
for(int i=0;i<n+m;i++){
if(d[i].dir)
cout<<ans[i]<<" ";
}
cout<<endl;
return 0;
}