func_code_string: #include <bits/stdc++.h>   const int INF = 0x3f3f3f3f;   using namespace std;   void file(bool opt) {     if (opt && fopen( in.txt ,  r ))       freopen( in.txt ,  r , stdin), freopen( out.txt ,  w , stdout);   }   struct node {     double x, y;   } point[100000 + 5], tu[100000 + 5];   int tot = 0;   int n;   double multi(node p0, node p1, node p2) {     return (p1.x - p0.x) * (p2.y - p0.y) - (p2.x - p0.x) * (p1.y - p0.y);   }   double dis(node a, node b) {     return (a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y);   }   bool cmp(node a, node b) {     double x = multi(a, b, point[1]);     if (x > 0 || (x == 0 && dis(a, point[1]) < dis(b, point[1]))) return 1;     return 0;   }   void Graham() {     int k = 1;     for (int i = 1; i <= n; i++)       if (point[i].y < point[k].y ||           (point[i].y == point[k].y && point[i].x < point[k].x))         k = i;     swap(point[1], point[k]);     sort(point + 2, point + 1 + n, cmp);     tot = 2, tu[1] = point[1], tu[2] = point[2];     for (int i = 3; i <= n; i++) {       while (tot >= 1 && multi(tu[tot], tu[tot - 1], point[i]) >= 0) tot--;       tu[++tot] = point[i];     }   }   int main() {     file(1);     scanf( %d , &n);     for (int i = 1; i <= n; i++) {       scanf( %lf%lf , &point[i].x, &point[i].y);       point[i].y = point[i].y - point[i].x * point[i].x;     }     if (n == 1) {       puts( 0 );       return 0;     }     Graham();     int ans = 0;     for (int i = 1; i <= tot; i++) {       node a = tu[i], b = tu[(i + 1) > tot ? 1 : (i + 1)],            c = {0, (long long)1e15};       if (a.x != b.x) {         double x = multi(a, b, c);         if (x < 0) ans++;       }     }     cout << ans << endl;     return 0;   }   