AcWing 4480. 倒垃圾
原题链接
中等
作者:
小.bug
,
2022-06-12 09:55:04
,
所有人可见
,
阅读 189
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 200010;
int a[N], b[N], c[N], cnt[N];
int n, m;
int main()
{
cin >> n >> m;
for(int i = 1; i <= n + m; i++) cin >> c[i];
int t;
for(int i = 1, k = 0, j = 0; i <= n + m; i++)
{
cin >> t;
if(t) b[++k] = c[i];
else a[++j] = c[i];
}
b[0] = INT_MIN, b[m + 1] = INT_MAX;
for(int i = 1; i <= n; i++)
{
int l = 0, r = m + 1;
while(l + 1 != r)
{
int mid = (l + r) / 2;
if(b[mid] < a[i]) l = mid;
else r = mid;
}
if((ll)a[i] - b[l] <= (ll)b[r] - a[i]) cnt[l] ++;
else cnt[r] ++;
}
for(int i = 1; i <= m; i++) cout << cnt[i] << ' ';
return 0;
}