本文将同步发布于:
题目
题意概述
给你平面上的一些点和直线,有两种操作:
- 新加入一个点 ( x , y ) (x,y) (x,y);
- 给定一条直线 a x + b y = c ax+by=c ax+by=c,询问是否所有点都在这条直线的同侧(在直线上不合法)。
初始时有 n ≤ 1 0 5 n\leq 10^5 n≤105 个点,共有 q ≤ 1 0 5 q\leq 10^5 q≤105 次操作。
题解
对题意转化
我们考虑将 所有点都在直线的同一侧 这一条件进行转化。
具体地,我们先考虑一个简单的子问题。
简单子问题
问题是这样的,对于一条标准形式的直线 a x + b y + c = 0 ax+by+c=0 ax+by+c=0,在它同侧的点 ( x p , y p ) (x_p,y_p) (xp,yp) 满足什么性质?
我们倒推并分类讨论:
- 若 a x p + b y p + c = 0 ax_p+by_p+c=0 axp+byp+c=0,显然点 ( x p , y p ) (x_p,y_p) (xp,yp) 在这条直线上;
- 若 a x p + b y p + c < 0 ax_p+by_p+c<0 axp+byp+c<0,显然它与所有点 q q q 满足 a x q + b y q + c < 0 ax_q+by_q+c<0 axq+byq+c<0 在直线的同侧;
- 若 a x p + b y p + c > 0 ax_p+by_p+c>0 axp+byp+c>0,显然它与所有点 q q q 满足 a x q + b y q + c > 0 ax_q+by_q+c>0 ax