func_code_string: #include <bits/stdc++.h>   using namespace std;   template <typename T>   inline int Chkmax(T &a, T b) {     return a < b ? a = b, 1 : 0;   }   template <typename T>   inline int Chkmin(T &a, T b) {     return a > b ? a = b, 1 : 0;   }   template <typename T>   inline T read() {     T sum = 0, fl = 1;     char ch = getchar();     for (; !isdigit(ch); ch = getchar())       if (ch ==  - ) fl = -1;     for (; isdigit(ch); ch = getchar()) sum = (sum << 3) + (sum << 1) + ch -  0 ;     return sum * fl;   }   inline void proc_status() {     ifstream t( /proc/self/status );     cerr << string(istreambuf_iterator<char>(t), istreambuf_iterator<char>())          << endl;   }   const int Maxn = 100000 + 100;   int N, Stack[Maxn], top;   pair<long long, long long> A[Maxn];   inline double get_slope(pair<long long, long long> a,                           pair<long long, long long> b) {     return (double)(b.second - a.second) / (b.first - a.first);   }   inline void Solve() {     sort(A + 1, A + N + 1);     int tot = 0;     A[N + 1].first = 1e7;     for (int i = 1; i <= N; ++i)       if (A[i].first != A[i + 1].first) A[++tot] = A[i];     for (int i = 1; i <= tot; ++i) {       while (top >= 2 &&              get_slope(A[i], A[Stack[top]]) >= get_slope(A[i], A[Stack[top - 1]]))         --top;       Stack[++top] = i;     }     cout << top - 1 << endl;   }   inline void Input() {     N = read<int>();     for (int i = 1; i <= N; ++i)       A[i].first = read<long long>(),       A[i].second = read<long long>() - A[i].first * A[i].first;   }   int main() {     Input();     Solve();     return 0;   }   