简单的离散化应用。。
我们把询问的结果以询问左端点从小到大排序,
之后只需要不断的更新一个大区间就好了。。。
N 比较小,所以可以接受。
以下是 AC 代码
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5+5;
#define ll long long
inline int read()
{
int s=0,w=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();
return s*w;
}
struct node
{
int l,r;
}num[maxn];
bool cmp(node a,node b)
{
return a.l<b.l;
}
int main()
{
int n = read();
for(int i=1;i<=n;i++)
{
int x=read(), y=read();
num[i].l=x ,num[i].r=y;
}
sort(num+1,num+1+n,cmp);
int st=num[1].l, en=num[1].r;
int sum = 0;
for(int i=2;i<=n;i++)
{
if(num[i].l <= en)
{
if(num[i].r > en)
en = num[i].r;
}
else
{
sum += en-st;
st = num[i].l;
en = num[i].r;
}
}
sum += en-st;
printf("%d\n",sum);
return 0;
}