HDU 5091 Beam Cannon 线段树+扫描线
2016-03-09 22:46
417 查看
马上要写一道线段树+扫描线的题,先把很早之前写过的一道复习一下。
代码:
代码:
#include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <algorithm> using namespace std; struct edge_mode { int y, l, r, val; void edge_make(int y,int l,int r,int val) { this->y = y; this->l = l; this->r = r; this->val = val; } }edge[20005]; struct segment { int add, max; }segtree[160005]; bool cmp(edge_mode a, edge_mode b) { if (a.y < b.y) return true; else return false; } void init(int id, int l, int r) { segtree[id].add = segtree[id].max = 0; if (l == r) return; init(id << 1, l, (l + r) >> 1); init(id << 1 | 1, ((l + r) >> 1 )+ 1, r); } void update(int id, int l, int r, int nl, int nr, int val) { if (r<nl || l>nr) return; if (l >= nl&&r <= nr) { segtree[id].add += val; segtree[id].max += val; return; } update(id << 1, l, (l + r) >> 1, nl, nr, val); update(id << 1 | 1, ((l + r) >> 1) + 1, r, nl, nr, val); segtree[id].max = max(segtree[id << 1].max, segtree[id << 1 | 1].max) + segtree[id].add; } int main() { int n, w, h; while ((scanf("%d %d %d", &n, &w, &h)) == 3) { init(1, 0, 40000); for (int x = 0, y = 0, i = 0; i < n; i++) { scanf("%d %d", &x, &y); x += 20000; y += 20000; edge[2 * i].edge_make(y, x, x + w, 1); edge[2 * i + 1].edge_make(y + h + 1, x, x + w, -1); } sort(edge, edge + 2 * n, cmp); int ans = 0; for (int i = 0,t = 0; i <= 40000; i++) { while (edge[t].y == i&&t < 2 * n) { update(1, 0, 40000, edge[t].l, edge[t].r, edge[t].val); t++; } ans = max(ans, segtree[1].max); } printf("%d\n", ans); } return 0; }
相关文章推荐
- pexpect 初坑
- 万年历(二)
- django学习笔记整理(1)django的MTV模式
- MapReduce Shuffle性能调优
- 13种常用按钮、文本框、表单等CSS样式
- UnityContainer中RegisterType与RegisterInstance的区别
- UIStepper 缩放:UI的使用
- 芒果iOS开发之Apple Pay Programming Guide part2
- php-post数据处理
- 写出好的前端代码不是件容易事
- MUD(制造者用法描述)
- POJ 3617 Best Cow Line (贪心)
- hexo+github在windows下创建静态blog
- debian上搭建teamtalk环境
- 操作系统 之 库函数和系统调用
- JAVA 中BIO,NIO,AIO的理解
- leetcode:Remove Duplicates from Sorted List 【Java】
- 函数嵌套
- p188习题2
- POJ 3617 Best Cow Line (贪心)