int n; structRange{ int l,r; booloperator <(const Range& W)const{ return r<W.r; }//重载小于号 }range[N];
intmain() { scanf("%d", &n); for (int i = 0; i < n; i ++ ){ int l,r; scanf("%d%d", &l, &r); range[i]={l,r};//读入l,r } sort(range,range+n);//按右端点进行排序 int res=0,ed=-2e9;//ed代表上一个点的右端点 for (int i = 0; i < n; i ++ ){ if(range[i].l>ed){ res++;//点的数量加一 ed=range[i].r; } } printf("%d\n",res); return0; }
int n; structRange{ int l,r; booloperator <(const Range& W)const{ return r<W.r; } }range[N];
intmain() { scanf("%d", &n); for (int i = 0; i < n; i ++ ){ int l,r; scanf("%d%d", &l, &r); range[i]={l,r}; } sort(range,range+n); int res=0,ed=-2e9; for (int i = 0; i < n; i ++ ){ if(range[i].l>ed){ res++; ed=range[i].r; } } printf("%d\n",res); return0; }
int n; structRange{ int l,r; booloperator<(const Range &W)const{ return l<W.l; }//按左端点排序 }range[N];
intmain() { scanf("%d", &n); for (int i = 0; i < n; i ++ ){ int l,r; scanf("%d%d", &l, &r); range[i]={l,r}; } sort(range,range+n);//sort排序 priority_queue<int,vector<int>,greater<int>> heap;//小根堆维护所有组的右端点最小值 for (int i = 0; i < n; i ++ ){//从左往右枚举 auto r=range[i];//选择当前区间 if(heap.empty()||heap.top()>=r.l)heap.push(r.r); else{ heap.pop(); heap.push(r.r); } } printf("%d\n",heap.size()); return0; }