也许一种新思路?
查看原帖
也许一种新思路?
750579
LEE114514楼主2023/5/28 22:54

用结构体存储线段。对于线段A、B,重载小于号为A的右端点小于B的左端点,那么相等即为相交,用set维护,每次插入删除所有有相交的线段并插入当前线段。

#include <bits/stdc++.h>
using namespace std;
struct seg{
	int l,r;
	inline bool operator<(const seg &tmp)const{return r<tmp.l;}
};
set<seg> s;
void add(int l,int r){
	for(auto iter=s.find(seg{l,r});iter!=s.end();iter=s.find(seg{l,r})) l=min(l,iter->l),r=max(r,iter->r),s.erase(iter);
	s.emplace(seg{l,r});
}
int n,l,r,ans;
int main(){
	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	cin>>n;
	while(n--) cin>>l>>r,add(l,r-1);
	for(auto iter:s) ans+=iter.r-iter.l+1;
	cout<<ans;
}
2023/5/28 22:54
加载中...