题目链接:这里
题意:c[i]=b[i]-a[i],现在给你a[i]和c[i]的相对大小,问你可不可能出现b[i]满足条件,如果有的话,输出。
解法:贪心,最小的显然要最小,次小的在比最小大的基础上最小就好了。对于每一个数都二分一下就完了。
二分的时候把l打成了1,死活WA19。。。
//CF 761D
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5+7;
long long l, r, a[maxn], b[maxn], c[maxn];
priority_queue <pair<int, int> > S;
int n;
int main(){
cin >> n >> l >> r;
for(int i = 0; i < n; i++){
cin >> a[i];
}
for(int i = 0; i < n; i++){
int x;
cin >> x;
S.push(make_pair(x, i));
}
long long last = -1e16;
while(!S.empty()){
long long now = S.top().second;
S.pop();
long long L = l, R = r, ans = r+1;
while(L <= R){
long long mid = (L + R) / 2;
if(a[now] - mid > last){
L = mid + 1, ans = mid;
}
else{
R = mid - 1;
}
}
if(ans == r+1){
puts("-1");
return 0;
}
b[now] = ans;
last = a[now] - ans;
}
for(int i = 0; i < n; i++) cout << b[i] << " "; cout << endl;
}