#ifdef _WIN32 # define LL "%I64d" #else # define LL "%Ld" #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define null NULL #define mp make_pair #define pb(a) push_back(a) #define sz(a) ((int)(a).size()) #define all(a) a.begin() , a.end() #define fi first #define se second #define relaxMin(a , b) (a) = min((a),(b)) #define relaxMax(a , b) (a) = max((a),(b)) #define SQR(a) ((a)*(a)) typedef vector vi; typedef pair pii; typedef long long ll; struct point{ ll x , y; int sd; point(ll _x = 0 , ll _y = 0){ x = _x , y = _y; if(y > 0 || y == 0 && x >= 0) sd = 0; else sd = 1; } point operator-(point w){ return point(x - w.x , y - w.y); } ll vp(point to) const { return x * to.y - y * to.x; } bool operator<(const point& to) const{ if(sd != to.sd) return sd < to.sd; return vp(to) > 0; } }; vector in; int N , M; vector< vector< pair > > G; vector used; bool compare(const pair& f , const pair& s){ return f.se < s.se; } vi out; void doit(){ for(int i=0;i >::iterator it; it = lower_bound(G[v].begin(), G[v].end(), mp(-1 , in[pv] - in[v]), compare); if(++it == G[v].end()) it = G[v].begin(); if(used[v][it - G[v].begin()]) break; used[v][it - G[v].begin()] = true; pv = v, v = it->fi; } out.pb(sz(facet)); } } int main(){ freopen("fence.in" , "r" , stdin); freopen("fence.out" , "w" , stdout); scanf("%d%d" , &N , &M); in.resize(N); G.resize(N); used.resize(N); for(int i=0;i