此题目很像友好城市,但是不完全一样,注意这里并不是求最大上升子序列
因为只要有相交,则全都不可取
只能先排序,然后再进行遍历
所以这里若一头奶牛可取,当且仅当奶牛的r大于前面奶牛的r且小于后面奶牛的r
否则此奶牛或与前者相交或与后者相交都不可取
#include<iostream>
#include<algorithm>
using namespace std;
const int N=1e5+10;
struct eg
{
int l,r;
bool operator< (const eg& w)const
{
return l<w.l;
}
}ee[N];
int n,res;
int ma[N],mi[N];
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
int a,b;
cin>>a>>b;
ee[i]={a,b};
}
sort(ee+1,ee+n+1);
ma[0]=-1e7,mi[n+1]=1e7;
for(int i=1;i<=n;i++)
{
ma[i]=max(ma[i-1],ee[i].r);//注意这里是连续的大值
//因为最前面比此值大也会导致相交
}
for(int i=n;i>=1;i--)
{
mi[i]=min(mi[i+1],ee[i].r);//注意这里是连续的小值
//因为最后面比此值小也会导致相交
}
for(int i=1;i<=n;i++)
{
if(ee[i].r>ma[i-1]&&ee[i].r<mi[i+1])res++;
}
cout<<res;
return 0;
}