题解:
将重合部分标记,最后计算有多少重合区间
代码:
#include<bits/stdc++.h>
using namespace std;
struct node{
int st,ed;
}point[10005],a[10005];
int n,ans;
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d%d",&point[i].st,&point[i].ed);
int flag=0;
for(int j=1;j<=ans;j++){
if(point[i].st<=a[j].ed&&point[i].ed>=a[j].ed){
a[j].st=point[i].st;
flag=1;
break;
}
else if(point[i].ed>=a[j].st&&point[i].st<=a[j].st){
a[j].ed=point[i].ed;
flag=1;
break;
}
else if((point[i].ed>=a[j].ed&&point[i].st<=a[j].st)||(point[i].ed<=a[j].ed&&point[i].st>=a[j].st)){
a[j].ed=point[i].ed;
a[j].st=point[i].st;
flag=1;
break;
}
}
if(flag==0){
ans++;
a[ans].st=point[i].st;
a[ans].ed=point[i].ed;
}
for(int k=1;k<=ans;k++){
printf("%d %d %d %d %d\n",i,k,ans,point[i].st,point[i].ed);
}
}
printf("%d",ans);
return 0;
}