用map:
//百度题
#include<iostream>
#include<vector>
#include<algorithm>
#include<map>
using namespace std;
int main(){
int n,m;
cin>>n>>m;
int size=n+m;
map<int,int> imap;
//vector<pair<int,int>>imap(size);//记住这个教训
vector<int> person_super(size,-1);
for(int i=0;i<size;i++)
{
int k;
cin>>k;
imap.insert(pair<int,int>(k,i));
}
for(int i=0;i<size;i++)
{
cin>>person_super[i];
}
//sort(imap.begin(),imap.end());
//cout<<imap[0].first<<imap[0].second<<endl;
vector<int> nums(size,0);
for(auto iter=imap.begin();iter!=imap.end();iter++)
{
int index=iter->second;
if(person_super[index]==0)
{
auto left_iter=iter;
left_iter--;
while(person_super[left_iter->second] !=1) left_iter--;
int left=iter->first-left_iter->first;
auto right_iter=iter;
while(person_super[right_iter->second] != 1) right_iter++;
int right=right_iter->first-iter->first;
if(left<=right)
nums[left_iter->second]++;
else
nums[right_iter->second]++;
}
}
for(int i=0;i<size;i++)
{
if(person_super[i]==1)
cout<<nums[i]<<" ";
}
return 0;
}
用数组:
//百度题
#include<iostream>
#include<vector>
#include<algorithm>
#include<map>
using namespace std;
int main(){
int n,m;
cin>>n>>m;
int size=n+m;
//map<int,int> imap;
vector<pair<int,int>>imap(size);//记住这个教训
vector<int> person_super(size,-1);
for(int i=0;i<size;i++)
{
int k;
cin>>k;
imap[i].first=k;
imap[i].second=i;
//imap.insert(pair<int,int>(k,i));
}
for(int i=0;i<size;i++)
{
cin>>person_super[i];
}
sort(imap.begin(),imap.end());
//cout<<imap[0].first<<imap[0].second<<endl;
vector<int> nums(size,0);
//for(auto iter=imap.begin();iter!=imap.end();iter++)
for(int i=0;i<size;i++)
{
int index=imap[i].second;
//int index=iter->second;
if(person_super[index]==0)
{
//auto left_iter=iter;
//left_iter--;
//while(person_super[left_iter->second] !=1) left_iter--;
int j=i-1;
while(j>=0 && person_super[imap[j].second] !=1) j--;
if(left>=0) int left=imap[i].first-imap[j].first;
//int left=iter->first-left_iter->first;
//auto right_iter=iter;
int k=i+1;
while(k<size && person_super[imap[k].second] != 1) k++;
if(k<size) int right=imap[k].first-imap[i].first;
//int right=right_iter->first-iter->first;
if(left<=right)
nums[imap[j].second]++;
else
nums[imap[k].second]++;
}
}
for(int i=0;i<size;i++)
{
if(person_super[i]==1)
cout<<nums[i]<<" ";
}
return 0;
}