@@ -30,16 +30,16 @@ vector<P> halfPlaneIntersection(vector<Line> vs) {
3030 vector < Line > deq (sz (vs ) + 5 );
3131 vector < P > ans (sz (vs ) + 5 );
3232 deq [0 ] = vs [0 ];
33- int dh = 0 , dt = 1 , ah = 0 , at = 0 ;
34- #define upd (l , pt , op ) while (ah < at && sideOf(sp(l), ans[pt]) < 0) op;
33+ int ah = 0 , at = 0 ;
3534 for (int i = 1 ; i < sz (vs ); ++ i ) {
3635 if (angDiff (vs [i ], vs [i - 1 ]) == 0 ) continue ;
37- upd (vs [i ], at - 1 , (at -- ,dt -- )) upd (vs [i ], ah , (ah ++ ,dh ++ ));
38- ans [at ++ ] = lineInter (sp (deq [dt - 1 ]), sp (vs [i ])).second ;
39- deq [dt ++ ] = vs [i ];
36+ while (ah < at && sideOf (sp (vs [i ]),ans [at - 1 ]) < 0 ) at -- ;
37+ while (ah < at && sideOf (sp (vs [i ]),ans [ah ]) < 0 ) ah ++ ;
38+ ans [at ++ ] = lineInter (sp (deq [at ]), sp (vs [i ])).second ;
39+ deq [at ] = vs [i ];
4040 }
41- upd ( deq [dh ], at - 1 , ( at -- , dt -- )); upd ( deq [ dt ], ah , ( ah ++ , dh ++ )) ;
42- if ( dt - dh <= 2 ) return {} ;
43- ans [at ++ ] = lineInter (sp (deq [dt - 1 ]), sp (deq [dh ])).second ;
41+ while ( ah < at && sideOf ( sp ( deq [ah ]), ans [ at - 1 ]) < 0 ) at -- ;
42+ while ( ah < at && sideOf ( sp ( deq [ at ]), ans [ ah ]) < 0 ) ah ++ ;
43+ ans [at ++ ] = lineInter (sp (deq [ah ]), sp (deq [at ])).second ;
4444 return {ans .begin () + ah , ans .begin () + at };
4545}
0 commit comments