time limit per test2 seconds
memory limit per test256 megabytes inputstandard input outputstandard output Dasha logged into the system and began to solve problems. One of them is as follows:Given two sequences a and b of length n each you need to write a sequence c of length n, the i-th element of which is calculated as follows: ci = bi - ai.
About sequences a and b we know that their elements are in the range from l to r. More formally, elements satisfy the following conditions: l ≤ ai ≤ r and l ≤ bi ≤ r. About sequence c we know that all its elements are distinct.
Dasha wrote a solution to that problem quickly, but checking her work on the standard test was not so easy. Due to an error in the test system only the sequence a and the compressed sequence of the sequence c were known from that test.
Let’s give the definition to a compressed sequence. A compressed sequence of sequence c of length n is a sequence p of length n, so that pi equals to the number of integers which are less than or equal to ci in the sequence c. For example, for the sequence c = [250, 200, 300, 100, 50] the compressed sequence will be p = [4, 3, 5, 2, 1]. Pay attention that in c all integers are distinct. Consequently, the compressed sequence contains all integers from 1 to n inclusively.
Help Dasha to find any sequence b for which the calculated compressed sequence of sequence c is correct.
Input
The first line contains three integers n, l, r (1 ≤ n ≤ 105, 1 ≤ l ≤ r ≤ 109) — the length of the sequence and boundaries of the segment where the elements of sequences a and b are.The next line contains n integers a1, a2, …, an (l ≤ ai ≤ r) — the elements of the sequence a.
The next line contains n distinct integers p1, p2, …, pn (1 ≤ pi ≤ n) — the compressed sequence of the sequence c.
Output
If there is no the suitable sequence b, then in the only line print “-1”.Otherwise, in the only line print n integers — the elements of any suitable sequence b.
Examples
input 5 1 5 1 1 1 1 1 3 1 5 4 2 output 3 1 5 4 2 input 4 2 9 3 4 8 9 3 2 1 4 output 2 2 2 9 input 6 1 5 1 1 1 1 1 1 2 3 5 4 1 6 output -1 Note Sequence b which was found in the second sample is suitable, because calculated sequence c = [2 - 3, 2 - 4, 2 - 8, 9 - 9] = [ - 1, - 2, - 6, 0] (note that ci = bi - ai) has compressed sequence equals to p = [3, 2, 1, 4].【题目链接】:
【题解】
因为 c[i] = b[i]-a[i]; 题目所给的p[i]实际上是c[i]之间的大小关系; p[i]=1是最小的,p[i]=2则是第二小…p[i]=n则是最大的; 这样我们可以让 c的值从小到大为 c[1],c[1]+1,c[1]+2,c[1]+3…c[1]+n-1; 即每个值递增1 这样能够在满足p[]数组的情况下尽可能地让c[i]小,相应的b[i]也就小了 但是有可能我们要求c[i]为递增的规律的时候; b[i]是根据c[i]求出来的 某个i会出现 b[i]< l 这个时候让b[i]为l(b数组没有说一定要全都不同) 然后c[i]相应地调整; c[i]会变大一点,这样能保证满足p数组,同时b[i]还是最小的l,所以还是能够保证c[i]此时也是最小的 (但是如果b[i]>r,则直接输出无解; 因为此前的操作我们已经尽可能的让c数组小了; 如果还不行(即b[i]还是太大),那么就无解了;) 然后再从i+1开始 让 c[i+1]=c[i]+1 c[i+2] = c[i]+2 … 即此后每个值还是递增1 然后求出相应的b数组 (所以这个c数组最后可能中间会有不是c[i]=c[i-1]+1的断层); 一开始的时候设最小的c的下标为idx 让b[idx]=l;(这样能保证b数组、c数组一开始是最小的了) 求出这个时候的c[idx]作为发生器; 然后做上面的过程就好; 贪心点就是时刻保证c、b数组是最小的,这样b数组在某个时刻通过c数组获得的时候,如果大于r则肯定无解; 小于l则可以调整为l,还是保证c、b为最小的; 【完整代码】#includeusing namespace std;#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define LL long long#define rep1(i,a,b) for (int i = a;i <= b;i++)#define rep2(i,a,b) for (int i = a;i >= b;i--)#define mp make_pair#define pb push_back#define fi first#define se second#define rei(x) scanf("%d",&x)#define rel(x) scanf("%I64d",&x)typedef pair pii;typedef pair pll;const int dx[9] = { 0,1,-1,0,0,-1,-1,1,1};const int dy[9] = { 0,0,0,-1,1,-1,1,-1,1};const double pi = acos(-1.0);const int MAXN = 1e5+100;int a[MAXN],n,l,r,cc[MAXN],b[MAXN],c[MAXN];void wujie(){ puts("-1"); exit(0);}int main(){ //freopen("F:\\rush.txt","r",stdin); cin >> n >> l >> r; rep1(i,1,n) rei(a[i]); rep1(i,1,n) { int x; rei(x); cc[x] = i; } //c[i] = b[i]-a[i]; //c[idx]>c[1] //b[idx]-a[idx]>b[1]-a[1]; //c[i]+a[i] = b[i]; b[cc[1]] = l; c[cc[1]] = b[cc[1]]-a[cc[1]]; int temp = b[cc[1]]-a[cc[1]]; rep1(i,2,n) { int idx = cc[i]; // c[idx] = temp+1; b[idx] = c[idx]+a[idx]; temp++; if (b[idx] r) wujie(); } for (int i = 1;i <= n;i++) { printf("%d",b[i]); if (i==n) puts(""); else putchar(' '); } return 0;}