https://codeforces.ml/contest/1721/problem/C
從n往前走
因?yàn)閷τ赼i 他的最大值就是他對應(yīng)下面的b數(shù)組 當(dāng)一個(gè)數(shù)ai的最小值和最大值都只能取這個(gè)數(shù)的時(shí)候 那么后續(xù)的數(shù)也一定不能匹配這個(gè)數(shù)
所以弄個(gè)指針j在b數(shù)組
ai只能在bi里面通過二分找最小值 然后 到達(dá)bj這個(gè)點(diǎn)
void solve() {
int n;
cin >> n;
vector<int> a(n), b(n), c(n), d(n);
cin >> a >> b;
int j = n - 1;
for (int i = n - 1; i >= 0; i--) {
int x = lower_bound(b.begin(), b.end(), a[i]) - b.begin();
c[i] = b[x] - a[i];
d[i] = b[j] - a[i];
if (x == i) {
j = i - 1;
}
}
cout << c << "
" << d << "
";
}
本文摘自 :https://www.cnblogs.com/