題目鏈接;http://codeforces.com/problemset/problem/761/D點擊打開鏈接
ci=bi-ai
pi爲ci在c數組中爲第pi小個
給你p數組和a數組 構造b數組且範圍不可超過l~r
我們從最小的ci開始 爲了使後面更有空間構造 從範圍的左端點開始構造b數組 當碰見某個b小於範圍l時 將最小值加至l
如果超過r則說明無法構造 因爲此時構造已爲c數組的最小情況
#include <bits/stdc++.h>
using namespace std;
int n,l,r;
struct xjy
{
int a;
int num;
int pos;
int b;
bool operator < (const xjy &r)const
{
return num<r.num;
}
};
bool cmp1(xjy a1,xjy a2)
{
return a1.pos<a2.pos;
}
vector<xjy > s;
int main()
{
cin >> n >>l >>r;
for(int i=0;i<n;i++)
{
xjy mid;
cin >> mid.a;
mid.pos=i;
s.push_back(mid);
}
for(int i=0;i<n;i++)
cin >> s[i].num;
sort(s.begin(),s.end());
int mid=0;
int cnt=l-s[0].a;
s[0].b=cnt+s[0].a;
cnt++;
for(int i=1;i<n;i++)
{
s[i].b=cnt+s[i].a;
cnt++;
if(s[i].b>r)
{
cout << -1 ;
return 0;
}
if(s[i].b<l)
{
mid=max(mid,l-s[i].b);
}
}
sort(s.begin(),s.end(),cmp1);
for(int i=0;i<n;i++)
{
if(s[i].b+mid>r)
{
cout << "-1" <<endl;
return 0;
}
}
for(int i=0;i<n;i++)
cout <<s[i].b+mid << " ";
}