#include<iostream>
#include<vector>
#include<cmath>
#include<algorithm>
using namespace std;
#define y1 y11
#define ls rt<<1,l,m
#define rs rt<<1|1,m+1,r
const int maxn=1e3+;
double x1[maxn];
double y1[maxn];
double x2[maxn];
double y2[maxn];
vector<double> vx;
vector<double> vy;
double x[maxn];
double y[maxn];
struct node { int yl,yr,k; }pp[maxn];
vector<node> vxxx[maxn];
double tree[*maxn];
double ans[*maxn];
int lazy[*maxn]; int tot=;
void push_up(int rt) { tree[rt]=tree[rt<<]+tree[rt<<|]; }
//void push_down(int rt,int len) { lazy[rt<<1]+=lazy[rt]; lazy[rt<<1|1]+=lazy[rt]; lazy[rt]=0; }
void build(int rt,int l,int r)
{
if(l==r) { tot++; tree[l]=vy[tot]-vy[tot-]; return ; }
int m=(l+r)>>; build(ls); build(rs);push_up(rt);
}
void update(int p,int delta,int rt,int l,int r)
{
if(l==r) { tree[rt]+=delta; return ; }
int m=(l+r)>>;
if(p<=m)update(p,delta,ls);
else update(p,delta,rs);
push_up(rt);
}
void Update(int L,int R,int delta,int rt,int l,int r)
{
if(L<=l&&r<=R) { lazy[rt]+=delta; return ; }
if(lazy[rt]) push_down(rt,r-l+);
int m=(l+r)>>;
if(L<=m)Update(L,R,delta,ls);
if(R>m)Update(L,R,delta,rs);
push_up(rt);
}
int main()
{
int cnt=;
int n;
while()
{
scanf("%d",&n); if(n==) break;
for(int i=;i<=n;i++) scanf("%lf %lf %lf %lf",&x1[i],&y1[i],&x2[i],&y2[i]);
for(int i=;i<=n;i++)
{
vx.push_back(x1[i]);
vx.push_back(x2[i]);
vy.push_back(y1[i]);
vy.push_back(y2[i]);
}
sort(vx.begin(),vx.end()); vx.erase(unique(vx.begin(),vx.end()),vx.end());
for(int i=;i<vx.size();i++) x[i]=vx[i];
sort(vy.begin(),vy.end()); vy.erase(unique(vy.begin(),vy.end()),vy.end());
for(int i=;i<vy.size();i++) y[i]=vy[i];
for(int i=;i<=n;i++)
{
int k=lower_bound(vx.begin(),vx.end(),x1[i])-vx.begin();
node p; p.yl=y1[i]; p.yr=y2[i]; p.k=;
vxxx[k].push_back(p);
k=lower_bound(vx.begin(),vx.end(),x2[i])-vx.begin();
p.k=-;
vxxx[k].push_back(p);
}
int m=vy.size()-;
build(,,m);
double ans=;
for(int i=;i<vx.size();i++)
{
if(i==)
{
for(int j=;j<=vxx[i].size();j++)
{
node p=vxxx[i][j];
int l=lower_bound(vy.begin(),vy.end(),p.yl)-vy.begin();
int r=lower_bound(vy.begin(),vy.end(),p.yr)-vy.begin();
update(l,r,p.k,,,m);
}
}
}
}
}

poj 1151 (未完成) 扫描线 线段树 离散化的更多相关文章

  1. POJ 1151 Atlantis (扫描线+线段树)

    题目链接:http://poj.org/problem?id=1151 题意是平面上给你n个矩形,让你求矩形的面积并. 首先学一下什么是扫描线:http://www.cnblogs.com/scau2 ...

  2. POJ 1151:Atlantis 线段树+扫描线

    Atlantis Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 19374   Accepted: 7358 Descrip ...

  3. 矩形面积并-扫描线 线段树 离散化 模板-poj1151 hdu1542

    今天刚看到这个模板我是懵逼的,这个线段树既没有建树,也没有查询,只有一个update,而且区间成段更新也没有lazy标记....研究了一下午,我突然我发现我以前根本不懂扫描线,之所以没有lazy标记, ...

  4. POJ 1151 Atlantis(线段树-扫描线,矩形面积并)

    题目链接:http://poj.org/problem?id=1151 题目大意:坐标轴上给你n个矩形, 问这n个矩形覆盖的面积 题目思路:矩形面积并. 代码如下: #include<stdio ...

  5. HDU 1255 覆盖的面积 (扫描线 线段树 离散化 矩形面积并)

    题目链接 题意:中文题意. 分析:纯手敲,与上一道题目很相似,但是刚开始我以为只是把cnt>=0改成cnt>=2就行了,. 但是后来发现当当前加入的线段的范围之前 还有线段的时候就不行了, ...

  6. BZOJ 1645: [Usaco2007 Open]City Horizon 城市地平线 扫描线 + 线段树 + 离散化

    Code: #include<cstdio> #include<algorithm> #include<string> #define maxn 1030000 # ...

  7. 【POJ 2482】 Stars in Your Window(线段树+离散化+扫描线)

    [POJ 2482] Stars in Your Window(线段树+离散化+扫描线) Time Limit: 1000MS   Memory Limit: 65536K Total Submiss ...

  8. HDU 3265/POJ 3832 Posters(扫描线+线段树)(2009 Asia Ningbo Regional)

    Description Ted has a new house with a huge window. In this big summer, Ted decides to decorate the ...

  9. POJ 2528 Mayor's posters(线段树+离散化)

    Mayor's posters 转载自:http://blog.csdn.net/winddreams/article/details/38443761 [题目链接]Mayor's posters [ ...

随机推荐

  1. 浅谈HTTP中GET、POST用法以及它们的区别

    浅谈HTTP中GET.POST用法以及它们的区别 HTTP定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE.URL全称是资源描述符.我们可以这样认为: 一 ...

  2. linux基础之grep

    grep: Global search REgular expression and Print out the line 作用: 文本搜索工具,根据用户指定的模式对目标文本逐行进行匹配检查,打印匹配 ...

  3. Learning-Python【30】:基于UDP协议通信的套接字

    UDP协议没有粘包问题,但是缓冲区大小要足够装数据包大小,建议不要超过 512 服务端: # 服务端 import socket server = socket.socket(socket.AF_IN ...

  4. nmon 性能监控网页结果显示——EasyNmon

    首先,看看最终展示的结果显示样式: 报告界面: 1.安装包下载地址:https://github.com/mzky/easyNmon 2.下载后有2个压缩文件: 其中,nmon16g_x86中含有不同 ...

  5. DAY13 迭代器与生成器

    一.迭代器 定义:器:包含了多个值的容器 迭代:循环反馈(一次从容器中取出一个值) 迭代器:从装有多个值的容器中一次取出一个值给外界 优点:不依赖索引,完成取值 缺点:不能计算长度,不能指定位取值(只 ...

  6. 查看CPU温度

    因为不喜欢鲁大师,所以检索看有没有别的软件. 1)先是找到了aida64, 结果好像是要付费的,就没装. 2)因为自己也就想看cpu温度,于是寻思自己编程解决. 找到了下面的文章. 不但介绍了怎么编程 ...

  7. 字节顺序标记——BOM,Byte Order Mark

    定义 BOM(Byte Order Mark),字节顺序标记,出现在文本文件头部,Unicode编码标准中用于标识文件是采用哪种格式的编码.     介绍 UTF-8 不需要 BOM,尽管 Unico ...

  8. hdu6129 Just Do It!

    多校时找规律做过... 题意,给你一个数列a[1], a[2], a[3], a[4], ... , a[n],操作一次后变为a[1], a[1] ^ a[2], a[1] ^ a[2] ^ a[3] ...

  9. python中模块包的离线下载教程

    1.简介 当我们进行Python项目的迁移时(例如迁移到另外一台服务器上),如果该服务器要求离线安装, 往往需要我们将项目中的所需模块包进行离线操作. 2.教程 2.1 首先安装pip2pi模块,它可 ...

  10. systemctl用法及其语法

    1.确定是否安装systemd及其版本 # systemctl –version 2.确定systemd和systemctl的二进制文件和库文件的安装位置 # whereis systemd # wh ...