给你n个线段,代表线段的左右端点,问最少删几条线段,使得剩下当中存在一个线段与所有剩下的所有线段都有交集

简介: 考虑枚举每一条线段,求以此线段与所有线段都有交集,需要删除的线段数。那么对于此线段[L,R],右端点小于L的,与它无交集,需要全删掉。同理左端点大于R的线段,也需要都删掉。那么剩下的问题,就是需要删几个了。
#include<iostream>
#include<cstring>
#include<map>
#include<algorithm>
#include<stack>
#include<queue>
#include<cstdio>
#include<cmath>
#include<string.h>
using namespace std;
typedef long long ll;
const int maxn=2e5+10;
const int inf=99999999;
const int mod=1e9+7;
int a[maxn],b[maxn],x[maxn],y[maxn];
int main()
{
    int t;    
    scanf("%d",&t);
    while(t--)
    {
        int n;
        cin>>n;
        for(int i=1;i<=n;i++)
        {
            cin>>a[i]>>b[i];
            x[i]=a[i];
            y[i]=b[i];
        }
        sort(x+1,x+1+n);
        sort(y+1,y+1+n);
        ll minn = inf;
        for(int i=1;i<=n;i++)
        {
            ll l=lower_bound(y+1,y+1+n,a[i])-y-1;
            ll r=n-(upper_bound(x+1,x+1+n,b[i])-x)+1;
            minn=min(minn,l+r);
        }
        cout<<minn<<endl;
    }
}
目录
相关文章
|
3月前
|
算法 C++
平面中判断线段与矩形是否相交
平面中判断线段与矩形是否相交
46 0
|
6月前
假设你正在玩跳格子(所有格子排成一个纵列)游戏。需要 跳完n 个格子你才能抵达终点。 每次你可以跳 1 或 2 个格子。你有多少种不同的方法可以到达终点呢? 注意:给定 n 是一个正整数。
假设你正在玩跳格子(所有格子排成一个纵列)游戏。需要 跳完n 个格子你才能抵达终点。 每次你可以跳 1 或 2 个格子。你有多少种不同的方法可以到达终点呢? 注意:给定 n 是一个正整数。
|
6月前
|
存储 算法 Java
给定一组棋子的坐标,判断是否可以互相攻击。如果两个棋子的横纵坐标任意一个相同,则认为它们可以互相攻击。(提示:使用哈希表)
给定一组棋子的坐标,判断是否可以互相攻击。如果两个棋子的横纵坐标任意一个相同,则认为它们可以互相攻击。(提示:使用哈希表)
49 0
|
Java
判断顶点凹凸性、判断多边形的凹凸性、填充凹坑将凹多边形处理为凸多边形【java实现+原理讲解】
判断顶点凹凸性、判断多边形的凹凸性、填充凹坑将凹多边形处理为凸多边形【java实现+原理讲解】
243 0
判断顶点凹凸性、判断多边形的凹凸性、填充凹坑将凹多边形处理为凸多边形【java实现+原理讲解】
判断点是否在线段上
判断点是否在线段上
145 0
判断线段是否相交
判断线段是否相交
88 0
给定三个顶点的坐标使用程序计算三角形
给定三个顶点的坐标使用程序计算三角形
59 0
|
算法 Java
Java计算四边形中心点和两条线段交点算法
Java计算四边形中心点和两条线段交点算法
166 0
Java计算四边形中心点和两条线段交点算法