链接
题解
b i = a i + c i b_i=a_i+c_i bi=ai+ci
贪心
代码
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#define iinf 0x3f3f3f3f
#define linf (1ll<<60)
#define eps 1e-8
#define maxn 1000010
#define cl(x) memset(x,0,sizeof(x))
#define rep(_,__) for(_=1;_<=(__);_++)
#define em(x) emplace(x)
#define emb(x) emplace_back(x)
#define emf(x) emplace_front(x)
using namespace std;
using namespace __gnu_pbds;
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
ll read(ll x=0)
{
ll c, f(1);
for(c=getchar();!isdigit(c);c=getchar())if(c=='-')f=-f;
for(;isdigit(c);c=getchar())x=x*10+c-0x30;
return f*x;
}
ll n, a[maxn], b[maxn], c[maxn], pos[maxn], l, r, pre;
int main()
{
ll i, j, x, t;
n=read(), l=read(), r=read();
rep(i,n)a[i]=read();
rep(i,n)x=read(), pos[x]=i;
c[pos[1]]=l-a[pos[1]];
b[pos[1]]=l;
for(i=2;i<=n;i++)
{
ll p=pos[i];
c[pos[i]]=max(c[pos[i-1]]+1,l-a[pos[i]]);
b[pos[i]]=c[pos[i]]+a[pos[i]];
}
rep(i,n)if(b[i]>r)break;
if(i<=n)printf("-1");
else rep(i,n)printf("%lld ",b[i]);
return 0;
}