Codeforces 35E Parade(扫描线 线段树||STL)
来源:互联网 发布:sop16 单片机 编辑:程序博客网 时间:2024/06/06 04:19
题意:给定n个底边均在X轴上的矩形, 输出矩形覆盖后的所有转折点 1 ≤ n ≤ 1e5, 1 ≤ hi ≤ 1e9, - 1e9 ≤ li < ri ≤ 1e9
思路:将每个矩形拆成(l, h)和(r, -h),排序后如果高度是正数,就加入数据结构中,如果是负数,就从数据结构中删除他的相反数,每次高度发生变化是记录答案,注意下x相同时要取一个最大的。
这里数据结构可以用线段树,也可以用STL中的multiset
multiset代码:
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<set>#include<vector>using namespace std;const int maxn = 1e5+5;vector<pair<int, int>> p;vector<pair<int, int>> ans;multiset<int> s;int n;int main(void){ freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); while(cin >> n) { p.clear(), ans.clear(), s.clear(); for(int i = 1; i <= n; i++) { int h, l, r; scanf("%d%d%d", &h, &l, &r); p.push_back(make_pair(l, h)); p.push_back(make_pair(r, -h)); } sort(p.begin(), p.end()); s.insert(0); int maxH = 0; for(int i = 0, j; i < n*2; i = j) { for(j = i; j < n*2 && p[i].first == p[j].first; j++)//处理x相同的 { if(p[j].second > 0) s.insert(p[j].second); else s.erase(s.lower_bound(-p[j].second)); } if(*(s.rbegin()) != maxH) { ans.push_back(make_pair(p[i].first, maxH)); ans.push_back(make_pair(p[i].first, *(s.rbegin()))); maxH = *(s.rbegin()); } } int len = ans.size(); printf("%d\n", len); for(int i = 0; i < len; i++) printf("%d %d\n", ans[i].first, ans[i].second); } return 0;}
阅读全文
1 0
- Codeforces 35E Parade(扫描线 线段树||STL)
- codeforces 35E Parade 扫描线+线段树+离散化+STL
- Codeforces 35E Parade 扫描线 + list
- 【CodeForces】35E Parade 线段树
- Parade - CodeForces #35 (Div. 2) E 线段树
- CodeForces 35E Parade(线段树区间更新+离散化)
- Codeforces 35E. Parade (非递归线段树 离散化)
- CodeforcesBeta Round #35 (Div. 2) E. Parade(线段树区间更新)
- Codeforces Beta Round #35 (Div. 2) E. Parade(成段更新)
- CodeForces - 292E 线段树
- codeforces 400e 线段树
- 线段树 CodeForces 580E
- codeforces 413E 线段树
- codeforces 242E(线段树)
- Codeforces 249D Donkey and Stars (线段树+扫描线)
- 【扫描线+贪心+线段树】Codeforces 458C Elections
- CodeForces 610 D.Vika and Segments(线段树+扫描线)
- Codeforecs 69E. Subsegments STL/线段树
- Unity+Behavior Tree行为树 Behavior Designer 行为树介绍(二)
- 8月份计划
- 对比 tf.layers.conv2d_transpose和tf.nn.conv2d_transpose区别
- 相机采集高速运行物体,曝光时间设定以解决图像拖影现象
- 再谈CVE-2017-7047 Triple_Fetch和iOS 10.3.2沙盒逃逸
- Codeforces 35E Parade(扫描线 线段树||STL)
- 判别式模型与生成式模型的区别
- 选择排序
- HDU4902(线段树)练习题
- 二叉树问题---统计完全二叉树的节点个数
- JAVA类加载器学习
- Java之Annotation
- Java wait(),yield(),sleep()的区别
- 利用tensorflow进行单词分类