传送门
\(map\)是个好东西
-
起火部分起点为\(a\),终点为\(b\)。
-
我们可以在\(a\)处打个\(+1\)记号,在\(b\)处打个\(-1\)记号。
-
因为没打记号点和前面的点情况一样,所以我们可以枚举每个有记号的点,若从前到后记号总和\(>0\),那么便累加。
#include<bits/stdc++.h>
#define pr <int,int>
using namespace std;
map pr q;
map pr ::iterator it,last;
int ans,jl;
int main()
{
int n;
scanf("%d",&n);
for(int i=1; i<=n; i++)
{
int x,y;
scanf("%d%d",&x,&y);
q[x]++;q[y]--;
}
it=q.begin();
last=it;
jl+=it->second;
it++;
while(it!=q.end())
{
if(jl>0) ans+=(it->first - last->first);
jl+=it->second;
last=it;it++;
}
printf("%d",ans);
return 0;
}