求區間並集
阿新 • • 發佈:2018-11-12
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxn = 1010; struct node { int num; int pos; }sid[maxn]; bool cmp(node a, node b) { return a.num < b.num; } int main() { //freopen("in.txt", "r", stdin); int n; cin >> n; int l, r, top = 0; for(int i = 1; i <= n; ++i) { scanf("%d%d", &l, &r); sid[top].num = l; sid[top++].pos = 0; ///代表是區間左端點 sid[top].num = r; sid[top++].pos = 1; ///代表是區間右端點 } int cover = 0; int sum = 0; sort(sid, sid + top, cmp); for(int i = 0; i < top - 1; ++ i) { if(sid[i].pos == 0) cover ++; if(sid[i].pos == 1) cover--; if(cover == 0) continue; sum += sid[i + 1].num - sid[i].num; } cout << sum << endl; return 0; }