func_code_string: #include <bits/stdc++.h>   using namespace std;   int n;   long double V;   long double vx[111111], vy[111111];   int m, N;   struct point {     long double x, y;     bool operator<(const point &b) const {       return (x != b.x) ? (x < b.x) : (y > b.y);     }   } ans[111111], a[111111];   pair<long double, int> k[111111], b[111111], c[111111];   long double cs[111111];   int main() {     double V2;     scanf( %d%lf , &n, &V2);     V = V2;     for (int i = 1; i <= n; ++i) {       double ang;       scanf( %lf , &ang);       long double t = ang;       long double x = cos(t) * V * sin(t) * V / (0.5 * (9.8));       ans[i].x = x;       ans[i].y = 0;       k[i] = make_pair(tan(ang), i);     }     scanf( %d , &m);     long double mn = 1e9;     int arc = 0;     for (int i = 1; i <= m; ++i) {       double x, y;       scanf( %lf%lf , &x, &y);       a[i].x = x;       a[i].y = y;       long double A = 0.5 * (9.8) * x * x;       long double B = -x * V * V;       long double C = 0.5 * x * x * (9.8) + y * V * V;       long double D = B * B - 4 * A * C;       if (D < 0) {         if (x < mn) {           mn = x;           arc = i;         }       } else {         b[++N] = make_pair((sqrt(D) - B) / 2 / A, i);         c[N] = make_pair((-sqrt(D) - B) / 2 / A, i);       }     }     sort(k + 1, k + 1 + n);     sort(b + 1, b + 1 + N);     int j = 0;     long double mn2 = mn;     for (int i = 1; i <= n; ++i) {       for (; j < N && b[j + 1].first <= k[i].first;) {         ++j;         mn = min(a[b[j].second].x, mn);       }       int pos = k[i].second;       if (mn < ans[pos].x) {         ans[pos].x = mn;         ans[pos].y = mn * k[i].first - 0.5 * (9.8) * mn * mn *                                            (1 + k[i].first * k[i].first) / V / V;       }     }     sort(c + 1, c + 1 + N);     j = N + 1;     mn = mn2;     for (int i = n; i >= 1; --i) {       for (; j > 1 && c[j - 1].first >= k[i].first;)         mn = min(a[c[--j].second].x, mn);       int pos = k[i].second;       if (mn < ans[pos].x) {         ans[pos].x = mn;         ans[pos].y = mn * k[i].first - 0.5 * (9.8) * mn * mn *                                            (1 + k[i].first * k[i].first) / V / V;       }     }     for (int i = 1; i <= n; ++i) {       double x = ans[i].x, y = ans[i].y;       printf( %lf %lf n , x, y);     }   }   