题意简单不解释了;
思路:就按ci的大小将序列c从小到大排个序,然后满足bi-ai>(bi-1)-(ai-1)即可;
#include <bits/stdc++.h>
using namespace std;
struct node {
int a, c, id;
bool operator<(const node &x)const {
return c < x.c;
}
} s[100005];
int b[100005];
int main() {
int n, l, r;
scanf("%d%d%d", &n, &l, &r);
for(int i = 0; i < n; i++) {
scanf("%d", &s[i].a);
s[i].id = i;
}
for(int i = 0; i < n; i++) {
scanf("%d", &s[i].c);
}
sort(s, s + n);
int res = l - r - 1;
bool flag = false;
for(int i = 0; i < n; i++) {
int j = s[i].id;
b[j] = max(l, res + 1 + s[i].a);
res = b[j] - s[i].a;
if(b[j] < l || b[j] > r) {
flag = true;
break;
}
}
if(flag) {
printf("-1\n");
return 0;
}
for(int i = 0; i < n; i++)
printf("%d ", b[i]);
return 0;
}