hiho #1305 区间求差

#1305 : 区间求差

时间限制:10000ms
单点时限:1000ms
内存限制:256MB

描述

给定两个区间集合 A 和 B,其中集合 A 包含 N 个区间[ A1A2 ], [ A3A4 ], ..., [ A2N-1A2N ],集合 B 包含 M 个区间[ B1B2 ], [ B3B4 ], ..., [ B2M-1B2M ]。求 A - B 的长度。

例如对于 A = {[2, 5], [4, 10], [14, 18]}, B = {[1, 3], [8, 15]}, A - B = {(3, 8), (15, 18]},长度为8。

输入

第一行:包含两个整数 N 和 M (1 ≤ NM ≤ 100000)。

第二行:包含 2N 个整数 A1A2, ..., A2N (1 ≤ Ai ≤ 100000000)。

第三行:包含 2M 个整数 B1B2, ..., B2M (1 ≤= Bi ≤ 100000000)。

输出

一个整数,代表 A - B 的长度。

样例输入
3 2
2 5 4 10 14 18
1 3 8 15
样例输出
8


 1 #include"iostream"
 2 #include"algorithm"
 3 #include"cstring"
 4 #define MAX 400001
 5 using namespace std;
 6 
 7 
 8 struct point
 9 {
10     int x;
11     int state;
12 };
13 
14 point nn[MAX];
15 
16 bool cmp(point p1, point p2)
17 {
18     return p1.x < p2.x;
19 }
20 
21 int main()
22 {
23     int n, m;
24     int start, len=0;
25     int A = 0, B = 0;
26     cin >> n >> m;
27 
28     for (int i = 0; i < 2 * n; i += 2)
29     {
30         cin >> nn[i].x;
31         nn[i].state = 0;
32         cin >> nn[i + 1].x;
33         nn[i + 1].state = 1;
34     }
35 
36     for (int i = 2*n; i < 2 * (n+m); i += 2)
37     {
38         cin >> nn[i].x;
39         nn[i].state = 2;
40         cin >> nn[i + 1].x;
41         nn[i + 1].state = 3;
42     }
43 
44     n = 2 * (n + m);
45     sort(nn, nn + n, cmp);
46 
47     for (int i = 0; i<n; i++)
48     {
49         switch (nn[i].state)
50         {
51         case 0:
52             if (!B && !A)
53                 start = nn[i].x;
54             A++;
55             break;
56         case 1:
57             A--;
58             if (!B && !A)
59                 len += nn[i].x - start;
60             break;
61         case 2:
62             if (A && !B)
63                 len += nn[i].x - start;
64             B++;
65             break;
66         case 3:
67             B--;
68             if (A && !B)
69                 start = nn[i].x;
70             break;
71         }
72     }
73 
74     cout << len;
75 
76     return 0;
77 }
原文地址:https://www.cnblogs.com/SeekHit/p/5565009.html