#include<iostream>
using namespace std;
int main()
{
int n;
cin >> n;
int* a, * b, * c, * d;
int sum = 0;
int symbol = 0;
a = new int[n];
b = new int[n];
c = new int[n];
d = new int[n];
for (int i = 0; i < n; i++)
cin >> a[i] >> b[i];
for (int i = 0; i < n; i++)
cin >> c[i] >> d[i];
int i = 0, j = 0;
while (1)
{
if (d[i] <= a[j])//d<=a
{
if (i == n - 1)
break;
else
i++;
}
else if (c[i] >= b[j])//c>=b
{
if (j == n - 1)
break;
else
j++;
}
else if (c[i] < a[j])
{
if (d[i] <= b[j])//c<=a<d<=b
{
sum = sum + d[i] - a[j];
if (i == n - 1)
break;
else
i++;
}
else//c<=a<b<d
{
sum = sum + b[j] - a[j];
if (j == n - 1)
break;
else
j++;
}
}
else if (c[i] >= a[j])
{
if (d[i] < b[j])//a<=c<d<b
{
sum = sum + d[i] - c[i];
if (i == n - 1)
break;
else
i++;
}
else
{
sum = sum + b[j] - c[i];//a<=c<b<=d
if (j == n - 1)
break;
else
j++;
}
}
}
delete[]a;
delete[]b;
delete[]c;
delete[]d;
cout << sum << endl;
return 0;
}
运行结果:
每次比较两个时间段E,F,假设E的时间为(a,b),F为(c,d),且a<c,则比较完E,F两段时间后取E之后的那段时间G与F继续比较,反之亦然,然后依次类推。