【POJ 1151】Atlantis
离散化后扫描线扫一遍。
夏令营时gty学长就讲过扫描线,可惜当时too naive,知道现在才写出模板题。
当时也不会线段树啊233
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 103; struct node {
double x1, x2, y; int d;
node (double _x1 = 0, double _x2 = 0, double _y = 0, int _d = 0) : x1(_x1), x2(_x2), y(_y), d(_d) {}
} L[N << 1];
bool cmp(node A, node B) {return A.y < B.y;}
int n, m, lazy[N << 3], cnt;
double X[N << 2], sum[N << 3];
int find(double x) {
int left = 1, right = n, mid;
while (left <= right) {
mid = (left + right) >> 1;
if (X[mid] == x) return mid;
else if (X[mid] > x) right = mid - 1;
else left = mid + 1;
}
}
void pushup(int rt, int l, int r) {
if (lazy[rt]) sum[rt] = X[r + 1] - X[l];
else if (l == r) sum[rt] = 0;
else sum[rt] = sum[rt << 1] + sum[rt << 1 | 1];
}
void add(int rt, int l, int r, int L, int R, int s) {
if (L <= l && r <= R) {
lazy[rt] += s;
pushup(rt, l, r);
return;
}
int mid = (l + r) >> 1;
if (L <= mid) add(rt << 1, l, mid, L, R, s);
if (R > mid) add(rt << 1 | 1, mid + 1, r, L, R, s);
pushup(rt, l, r);
} int main() {
int c = 0, l, r;
double x1, x2, y1, y2, ans;
while (scanf("%d", &m), m) {
memset(sum, 0, sizeof(sum));
memset(lazy, 0, sizeof(lazy));
cnt = 0;
for(int i = 1; i <= m; ++i) {
scanf("%lf%lf%lf%lf", &x1, &y1, &x2, &y2);
L[++cnt] = node(x1, x2, y1, 1);
X[cnt] = x1;
L[++cnt] = node(x1, x2, y2, -1);
X[cnt] = x2;
}
sort(X + 1, X + cnt + 1);
sort(L + 1, L + cnt + 1, cmp);
n = 1;
for(int i = 2; i <= cnt; ++i)
if (X[i] != X[i - 1]) X[++n] = X[i];
ans = 0;
for(int i = 1; i < cnt; ++i) {
l = find(L[i].x1); r = find(L[i].x2) - 1;
add(1, 1, n, l, r, L[i].d);
ans += sum[1] * (L[i + 1].y - L[i].y);
}
printf("Test case #%d\nTotal explored area: %.2lf\n\n", ++c, ans);
}
return 0;
}
poj上用G++交WA的生活不能自理QAQ,用C++交题大法好~
【POJ 1151】Atlantis的更多相关文章
- 【POJ 1151】 Altlantis
[题目链接] 点击打开链接 [算法] 线段树扫描线 推荐一篇比较容易理解的线段树扫描线的文章 : https://blog.csdn.net/u013480600/article/details/22 ...
- bzoj 2295: 【POJ Challenge】我爱你啊
2295: [POJ Challenge]我爱你啊 Time Limit: 1 Sec Memory Limit: 128 MB Description ftiasch是个十分受女生欢迎的同学,所以 ...
- 【链表】BZOJ 2288: 【POJ Challenge】生日礼物
2288: [POJ Challenge]生日礼物 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 382 Solved: 111[Submit][S ...
- BZOJ2288: 【POJ Challenge】生日礼物
2288: [POJ Challenge]生日礼物 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 284 Solved: 82[Submit][St ...
- BZOJ2293: 【POJ Challenge】吉他英雄
2293: [POJ Challenge]吉他英雄 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 80 Solved: 59[Submit][Stat ...
- BZOJ2287: 【POJ Challenge】消失之物
2287: [POJ Challenge]消失之物 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 254 Solved: 140[Submit][S ...
- BZOJ2295: 【POJ Challenge】我爱你啊
2295: [POJ Challenge]我爱你啊 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 126 Solved: 90[Submit][Sta ...
- BZOJ2296: 【POJ Challenge】随机种子
2296: [POJ Challenge]随机种子 Time Limit: 1 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 114 Solv ...
- BZOJ2292: 【POJ Challenge 】永远挑战
2292: [POJ Challenge ]永远挑战 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 513 Solved: 201[Submit][ ...
随机推荐
- 扩展欧几里德算法 cogs.tk 2057. [ZLXOI2015]殉国
2057. [ZLXOI2015]殉国 ★☆ 输入文件:BlackHawk.in 输出文件:BlackHawk.out 评测插件时间限制:0.05 s 内存限制:256 MB [题目描 ...
- OpenCV 之 边缘检测
上一篇 <OpenCV 之 图像平滑> 中,提到的图像平滑,从信号处理的角度来看,实际上是一种“低通滤波器”. 本篇中,数字图像的边缘,因为通常都是像素值变化剧烈的区域 (“高频”),故可 ...
- 添加事件及Event对象的兼容写法
一.事件流 事件流描述的是从页面中接受事件的顺序. IE的事件流是事件冒泡流,而Netscape的事件流是事件捕获流 1.事件冒泡 事件冒泡,即事件最开始由最具体的元素(文档中嵌套层次最深的那个节点) ...
- XMLHTTP中setRequestHeader方法和参数
注意:在FF里面需要将open方法放在setRequestHeader之前 一.为何要用到setRequestHeader 通 常在HTTP协议里,客户端像服务器取得某个网页的时候,必须发送一个HTT ...
- [No00002B]知乎精选:如果兔子都在拼命奔跑,乌龟该如何前进
最近看到友人分享的一篇好文章,看了不下三遍,想开了很多的事情…… 在这个世界上永远存在一些比你更加牛的人,无论什么方面.如果把人生比作攀登,也许你穷其一生可以达到一定的高度,但对某些人来说珠峰都不成问 ...
- Html中模态框(弹出框)使用入门
作为html学习学习模态框需要二步: 效果图 第一步学习HTML中 div的弹出 ①触发按钮 <input class="btn btn-success" i ...
- Oracle中把一个DateTime的字符串转化成date类型。to_date('2016/12/8 18:55:43','yyyy/MM/dd hh24:mi:ss'),
Oracle中把一个DateTime或者该形态字符串转化成date类型. to_date('2016/12/8 18:55:43','yyyy/MM/dd hh24:mi:ss'), 或者: sele ...
- PL/SQL流程控制语句
PL/SQL流程控制语句介绍PL/SQL的流程控制语句, 包括如下三类:控制语句: IF 语句循环语句: LOOP语句, EXIT语句顺序语句: GOTO语句, NULL语句①if语句 IF < ...
- delphi附带通用控件安装方法:
附带通用控件安装方法:----------基本安装1.对于单个控件,Componet-->install component..-->PAS或DCU文件-->install;2.对于 ...
- 使用ViewBag传送数据从控制器至视图
前一篇<ASP.NET MVC读取XML并使用ViewData显示>http://www.cnblogs.com/insus/p/4308740.html 中,在控制器中使用了ViewDa ...