zhe li MEI YOU DA AN-但有题解-救民于水火

caochenshuo 2024-01-13 14:29:08 2024-01-13 14:52:43 4 返回题目

(白嫖怪丨(gun)开!) 介道题
十分的简单(bushi~)哈
first,定义亿下~
second,结构体and cmp 起飞~
最后蛤,重点来了:
排序之后,比较每一个区间的重合情况并用l(left)和r(right)记录目标区间的begin和end
l的起始值:第一个区间的开头
r的起始值:第一个区间的结尾
如果相邻的两个区间不重叠,那么,输出l和r(不换行的人就别看了)
否则,max(r,a[i].b),更新r的值

最后的最后,输出l和r

CODE实现如下:

#include<bits/stdc++.h>
#define int long long

using namespace std;
struct A{
    int a,b;
}N[1000001];
bool cmp(A x,A y){
    if(x.a!=y.a)return x.a<y.a;
    return x.b>y.b;
}
int n;
signed main(){
	cin>>n;
	for(int i=1;i<=n;i++)cin>>N[i].a>>N[i].b;
	sort(N+1,N+n+1,cmp);
	int l=N[1].a,r=N[1].b;
	for(int i=2;i<=n;i++){
		if(N[i].a<=r)r=max(r,N[i].b);
		else{
			cout<<l<<" "<<r<<endl;
			l=N[i].a,r=N[i].b;
		}
	}
	cout<<l<<" "<<r;
	return 0;
}

杜绝复制!
(cookiebus的源代码透析专题)

{{ vote && vote.total.up }}