离散化后扫描线扫一遍。

夏令营时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的更多相关文章

  1. 【POJ 1151】 Altlantis

    [题目链接] 点击打开链接 [算法] 线段树扫描线 推荐一篇比较容易理解的线段树扫描线的文章 : https://blog.csdn.net/u013480600/article/details/22 ...

  2. bzoj 2295: 【POJ Challenge】我爱你啊

    2295: [POJ Challenge]我爱你啊 Time Limit: 1 Sec  Memory Limit: 128 MB Description ftiasch是个十分受女生欢迎的同学,所以 ...

  3. 【链表】BZOJ 2288: 【POJ Challenge】生日礼物

    2288: [POJ Challenge]生日礼物 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 382  Solved: 111[Submit][S ...

  4. BZOJ2288: 【POJ Challenge】生日礼物

    2288: [POJ Challenge]生日礼物 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 284  Solved: 82[Submit][St ...

  5. BZOJ2293: 【POJ Challenge】吉他英雄

    2293: [POJ Challenge]吉他英雄 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 80  Solved: 59[Submit][Stat ...

  6. BZOJ2287: 【POJ Challenge】消失之物

    2287: [POJ Challenge]消失之物 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 254  Solved: 140[Submit][S ...

  7. BZOJ2295: 【POJ Challenge】我爱你啊

    2295: [POJ Challenge]我爱你啊 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 126  Solved: 90[Submit][Sta ...

  8. BZOJ2296: 【POJ Challenge】随机种子

    2296: [POJ Challenge]随机种子 Time Limit: 1 Sec  Memory Limit: 128 MBSec  Special JudgeSubmit: 114  Solv ...

  9. BZOJ2292: 【POJ Challenge 】永远挑战

    2292: [POJ Challenge ]永远挑战 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 513  Solved: 201[Submit][ ...

随机推荐

  1. 怎样用ZBrush中的shadowbox创建物体

    ZBrush一直以方便著称业内各领域,模型师不需要在多个软件中编辑塑造模型,而在ZBrush用shadowbox创建物体的流程,在Tool面板上的Geometry子面板中,4.0版本引入了shadow ...

  2. go 字符变量

    go语言变量定义 第一类,通过关键字var来声明,可以在main函数体外 // varStudy //变量在main函数体外声明 package main import ( "fmt&quo ...

  3. Gprinter热敏打印机光栅位图点阵数据解析工具

    最近参与的项目有一个需求,解析佳博热敏打印机的光栅位图点阵数据并保存为图片文件.数据是通过Bus Hound抓取的,如下图所示. 其中1b 40为初始化打印机的指令,对应的ASCII码为ESC @,1 ...

  4. 三维网格形变算法(Gradient-Based Deformation)

    将三角网格上的顶点坐标(x,y,z)看作3个独立的标量场,那么网格上每个三角片都存在3个独立的梯度场.该梯度场是网格的微分属性,相当于网格的特征,在形变过程中随控制点集的移动而变化.那么当用户拖拽网格 ...

  5. Carcraft

    魔兽登录系统   创建魔兽系统相关窗体: 登录窗体(frmLogin) 注册窗体(frmRegister) 主窗体   (frmMain) 实现魔兽登录系统: 登录的界面如下 实现思路: 1.创建一个 ...

  6. 【转】【MySql】Waiting for table metadata lock原因分析

    MySQL在进行alter table等DDL操作时,有时会出现Waiting for table metadata lock的等待场景.而且,一旦alter table TableA的操作停滞在Wa ...

  7. .net core注入时作用域的说明

    Transient:每次获取实例都是新实例. Scoped:每次web请求都是新实例,在同一web请求是相同的实例. Singleton:实例只创建一次,以后的每次获取都是这一实例.

  8. 深度学习(deep learning)

    最近deep learning大火,不仅仅受到学术界的关注,更在工业界受到大家的追捧.在很多重要的评测中,DL都取得了state of the art的效果.尤其是在语音识别方面,DL使得错误率下降了 ...

  9. Linux下who命令之C语言实现

    Linux下who命令之C语言实现 Step1:前期准备 首先要有一个清楚的认识:linux中一切皆文件 实现who命令,who命令也是Linux中的一个文件,那我们怎么找到它呢?我们可以" ...

  10. Redis简介-安装-入门

    前言 我们team马上要用Redis了. 所以先学习一下这东西. Redis大名很早以前就听过了,以前在的公司都没有用到. 现在有机会终于接触到了,果断学习起来. 什么是redis Redis是完全开 ...