Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma gcc optimze("Ofast")
- #pragma loop_opt(on)
- //#include <ext/pb_ds/assoc_container.hpp>
- //#include <ext/pb_ds/tree_policy.hpp>
- #include <bits/stdc++.h>
- #define debug(x) 1&&(cout<<#x<<':'<<x<<'\n')
- #define mkp make_pair
- #define pb emplace_back
- #define pf emplace_front
- #define ff first
- #define ss second
- #define siz(v) (ll(v.size()))
- #define all(v) begin(v),end(v)
- #define rall(v) rbegin(v),rend(v)
- #define REP(i,l,r) for(int i=(l);i<(r);i++)
- #define mid (l+(r-l>>1))
- using namespace std;
- //using namespace __gnu_pbds;
- typedef long long ll;
- typedef long double ld;
- typedef pair<ll,ll> pll;
- //typedef tree<ll,null_type,less<ll>,rb_tree_tag,tree_order_statistics_node_update> rank_tree;
- //const long double PI = acos(-1),eps = 1e-8;
- constexpr ll N = 100000, INF = 1e18, MOD = 1000000007;
- ll n,p=0,x,y;
- map<ll,ll> mp;
- pll stk[N+1] = {};
- ll cross(pll u,pll v){return u.ff*v.ss-u.ss*v.ff;}
- ll isConv(pll a,pll b,pll c){return cross(pll(b.ff-a.ff,b.ss-a.ss),pll(c.ff-b.ff,c.ss-b.ss))<0;}
- signed main(){
- cin >> n;
- REP(i,0,n){
- cin >> x >> y, y-=x*x;
- if(mp.count(x))mp[x] = max(mp[x],y);
- else mp[x] = y;
- }
- for(auto dot:mp){
- while(p>1 && !isConv(stk[p-2],stk[p-1],dot))--p;
- stk[p++] = dot;
- }
- cout << p-1;
- }
Add Comment
Please, Sign In to add comment