离散化就是把大数用小数表示,需要用到时再换回大数的操作,因为数据范围很大,直接用大数肯定会T的。
这题的数据只存在大小关系,所以用C数组来存点(1,2,3,4,5,6…表示大小顺序)
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n,m;
ll ans,c[40010];
int a[20010],b[20010];
bool f[40010];
ll find(ll x){
for(int i=1;i<=m;i++)if(c[i]==x)return i;}
int main()
{
m=1;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i]>>b[i];
c[m++]=a[i];
c[m++]=b[i];
}
sort(c+1,c+m+1);
for(int i=1;i<=n;i++)
{
a[i]=find(a[i]);
b[i]=find(b[i]);
for(int j=a[i];j<b[i];j++)f[j]=1;
//注意,这里j不能取到b[i],不然会重复计算
}
for(int i=1;i<=m;i++)if(f[i])ans+=c[i+1]-c[i];
cout<<ans<<endl;
return 0;
}