func_code_string: #include <bits/stdc++.h>   using namespace std;   double sqr(double x) { return x * x; }   struct CPoint {     double x, y, n, l;     double length() { return sqrt(sqr(x) + sqr(y)); }   };   CPoint a[100100], b[100100];   double length(CPoint p1, CPoint p2) {     return sqrt(sqr(p1.x - p2.x) + sqr(p1.y - p2.y));   }   double calc(CPoint X, CPoint Y) { return X.length() + length(X, Y) + Y.l; }   int b_search(CPoint X, int l, int r) {     if (r - l <= 10) {       int i = -1;       double v = 100000000, tmp;       for (; l <= r; l++) {         tmp = calc(a[l], X);         if (tmp < v) {           v = tmp;           i = l;         }       }       return i;     }     int mid = (l + r) / 2;     double p1 = calc(a[mid - 1], X);     double p2 = calc(a[mid], X);     double p3 = calc(a[mid + 1], X);     if (p2 <= p3 && p2 <= p1) {       int i = b_search(X, l, mid);       int j = b_search(X, mid, r);       if (calc(a[i], X) < calc(a[j], X)) return i;       return j;     }     if (p1 <= p2 && p2 <= p3) return b_search(X, l, mid);     return b_search(X, mid, r);   }   int main() {     int N, M, i, j;     double A, B;     scanf( %d%d%lf%lf , &N, &M, &A, &B);     for (i = 0; i < N; i++) {       scanf( %lf , &a[i].y);       a[i].x = A;       a[i].n = i + 1;     }     for (i = 0; i < M; i++) {       scanf( %lf , &b[i].y);       b[i].x = B;       b[i].n = i + 1;     }     for (i = 0; i < M; i++) scanf( %lf , &b[i].l);     double v = 1000000000;     int ii = -1, jj = -1;     for (i = 0; i < M; i++) {       j = b_search(b[i], 0, N - 1);       if (v > calc(a[j], b[i])) {         jj = i + 1;         ii = j + 1;         v = calc(a[j], b[i]);       }     }     printf( %d %d , ii, jj);     return 0;   }   