双指针:给定两个升序数组a,b;b由a加一个值d转化而来 求d数组
作者:互联网
https://codeforces.ml/contest/1721/problem/C
从n往前走
因为对于ai 他的最大值就是他对应下面的b数组 当一个数ai的最小值和最大值都只能取这个数的时候 那么后续的数也一定不能匹配这个数
所以弄个指针j在b数组
ai只能在bi里面通过二分找最小值 然后 到达bj这个点
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 << "\n" << d << "\n";
}
标签:begin,int,cin,ai,最小值,数组,升序,指针 来源: https://www.cnblogs.com/liang302/p/16637695.html