POJ2665 Trees
2014-08-04 18:12
197 查看
对给出的区间进行排序 以开始时间为第一关键字,结束为第二关键字,对排序后的区间进行合并操作, 后面就很简单了
#include <iostream> #include <cstdio> #include <algorithm> using namespace std; const int M = 50005; struct node { int star; int endl; }oper[M]; int n, m; int ans; bool cmp(node p1, node p2) { if(p1.star != p2.star) return p1.star < p2.star; return p1.endl < p2.endl; } int main() { while(scanf("%d%d", &n, &m) != EOF) { if(!n && !m) break; for(int i = 0; i < m; i++) scanf("%d%d", &oper[i].star, &oper[i].endl); sort(oper, oper + m, cmp); int s = oper[0].star; int e = oper[0].endl; int i = 1; int k = 0; while(i < m) { //合并操作。 if(s <= oper[i].star && oper[i].endl <= e){ i++; }else if(s <= oper[i].star && oper[i].endl > e && e >= oper[i].star){ e = oper[i].endl; i++; }else { oper[k].star = s; oper[k++].endl = e; s = oper[i].star; e = oper[i].endl; i++; } } oper[k].star = s; oper[k].endl = e; ans = n+1; for(i = 0; i <= k; i++) { ans -= (oper[i].endl - oper[i].star + 1); //printf("%d %d %d %d\n", i, oper[i].star, oper[i].endl, ans); } printf("%d\n", ans); } return 0; }
相关文章推荐
- POJ 2665 Trees(水~)
- poj2665 Trees!
- poj 2665 Trees
- POJ 2665 Trees(我的水题之路——移树,POJ100题啦!)
- POJ 2665 Trees
- (7.3.18)POJ 2665 Trees(原本打算用线段树做的,后来看了一下题目,如同当头一棒)
- POJ 2665 Trees
- POJ 2665 Trees(水题)
- POJ 2665 Trees 水
- poj 2665 Trees
- 【POJ 1105 S-Trees】
- poj 2029 Get Many Persimmon Trees 二维树状数组
- POJ 2104 & HDU 2665 & POJ 2761 K-th Number (主席树入门题 区间第K大)
- poj 2029 Get Many Persimmon Trees
- Chapter06-Phylogenetic Trees Inherited(POJ 2414)(减少国家DP)
- POJ 2029 Get Many Persimmon Trees
- 【划分树】 POJ 2104 HDU 2665 K-th Number 裸题
- Chapter06-Phylogenetic Trees Inherited(POJ 2414)(状态压缩DP)
- poj 2029 Get Many Persimmon Trees(dp)
- poj_1105 S-trees