题意:
给定n条直线( y = kx + b) (n<=1e5)的参数ki , bi , 让求存不存在两个直线的交点的x坐标在整数x1 ,x2之间,即(x1 < x < x2)
分析:
首先每条线段与直线y = x1 , y=x2的 两个交点的y坐标记为(y1 , y2 )
可以这样来看存在两个直线在x1,x2之间的截线段相交,
(y1, y2) ,(y11 , y22) 若y1 > y11 , 那么必有y2 < y22 两条线段才相交。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll,ll> pll;
const int N = 2e5 + 100;
#define rep1(i,x,y) for(int i=x;i<=(int)y;i++)
#define rep(i,n) for(int i=0;i<(int)n;i++)
vector<pll> ans;
ll x1,x2,x[N],y[N],n;
int main()
{
cin>>n>>x1>>x2;
rep1(i,1,n) cin>>x[i]>>y[i],ans.push_back(pll(x[i]*x1 + y[i] , x[i]*x2 + y[i]));
sort(ans.begin(),ans.end());
ll max_ = -1e12 - 100;
rep(i,n){
max_ = max(ans[i].second , max_);
if(max_ > ans[i].second && ans[i].first !=ans[i-1].first){
printf("YES\n");
return 0;
}
}
printf("NO\n");
return 0;
}