POJ 1089 解题报告

来源:互联网 发布:中国木制品数据 编辑:程序博客网 时间:2024/06/03 21:33

这道题做的挺顺利的。

首先按照起点排序,一一扫描,合并后面能合并的,生成一个新区间,输出即可。

thestoryofsnow1089Accepted564K63MSC++1053B

/* ID: thestor1 LANG: C++ TASK: poj1089 */#include <iostream>#include <fstream>#include <cmath>#include <cstdio>#include <cstring>#include <limits>#include <string>#include <vector>#include <list>#include <set>#include <map>#include <queue>#include <stack>#include <algorithm>#include <cassert>using namespace std;class Interval {public:int ai, bi;Interval() : ai(-1), bi(-1) {}Interval(int ai, int bi) : ai(ai), bi(bi) {}inline bool operator< (const Interval &rhs) const {return ai < rhs.ai || (ai == rhs.ai && bi <= rhs.bi);}};int main(){int n;scanf("%d", &n);std::vector<Interval> intevals(n);for (int i = 0; i < n; ++i){scanf("%d%d", &intevals[i].ai, &intevals[i].bi);}sort(intevals.begin(), intevals.end());for (int i = 0; i < intevals.size();){int j = i + 1;while (j < intevals.size() && intevals[j].ai <= intevals[i].bi){intevals[i].bi = max(intevals[i].bi, intevals[j].bi);j++;}printf("%d %d\n", intevals[i].ai, intevals[i].bi);i = j;}return 0;  }


0 0