func_code_string: #include <bits/stdc++.h>   const int N = 100000 + 10;   long long A[N], B[N], L[N];   int n, m, a, b;   std::set<std::pair<long long, int> > dic;   double ans = 1e100;   int ansx, ansy;   double sqr(long long x) { return (double)x * x; }   void Cal(int idx) {     double dis;     long long x = B[idx] * a / b;     std::set<std::pair<long long, int> >::iterator u;     u = dic.lower_bound(std::pair<long long, int>(x, 0));     dis = L[idx];     dis += sqrt(sqr(u->first) + sqr(a));     dis += sqrt(sqr(u->first - B[idx]) + sqr(b - a));     if (dis < ans) {       ans = dis;       ansx = u->second;       ansy = idx;     }     if (u != dic.begin()) {       --u;       dis = L[idx];       dis += sqrt(sqr(u->first) + sqr(a));       dis += sqrt(sqr(u->first - B[idx]) + sqr(b - a));       if (dis < ans) {         ans = dis;         ansx = u->second;         ansy = idx;       }     }     u = dic.upper_bound(std::pair<long long, int>(x, 0));     if (u == dic.end()) return;     dis = L[idx];     dis += sqrt(sqr(u->first) + sqr(a));     dis += sqrt(sqr(u->first - B[idx]) + sqr(b - a));     if (dis < ans) {       ans = dis;       ansx = u->second;       ansy = idx;     }     if (++u != dic.end()) {       dis = L[idx];       dis += sqrt(sqr(u->first) + sqr(a));       dis += sqrt(sqr(u->first - B[idx]) + sqr(b - a));       if (dis < ans) {         ans = dis;         ansx = u->second;         ansy = idx;       }     }   }   int main() {     scanf( %d%d%d%d , &n, &m, &a, &b);     for (int i = 0; i < n; ++i) {       scanf( %I64d , &A[i]);       dic.insert(std::pair<long long, int>(A[i], i + 1));     }     for (int i = 0; i < m; ++i) scanf( %I64d , &B[i]);     for (int i = 0; i < m; ++i) scanf( %I64d , &L[i]);     for (int i = 0; i < m; ++i) Cal(i);     printf( %d %d n , ansx, ansy + 1);     return 0;   }   