Segment Tree 扫描线 分类: ACM TYPE 2014-08-29 13:08 89人阅读 评论(0) 收藏
#include<iostream>
#include<cstdio>
#include<algorithm>
#define Max 1005
using namespace std;
struct line{
double x, y1, y2;
int flag;
}x_line[Max]; struct node{
int l, r, flag;
double x, f;
}tree[Max]; double point[Max];
int n, m, xm; int cmp(double a,double b)
{
return a<b;
} bool comp(line a,line b)
{
return a.x<b.x;
} void Build(int l,int r,int k)
{
int m;
tree[k].l = l;
tree[k].r = r;
tree[k].flag = 0;
tree[k].x = 0.0;
tree[k].f = 0.0;
if(l+1 == r) return;
m = (l+r)>>1;
Build(l,m,k+k);
Build(m,r,k+k+1);
} void Myscanf()
{
m = 1;
double x1,x2,y1,y2;
scanf("%d",&n);
for(int i=0; i<n; i++)
{
scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2);
point[m] = y1;
x_line[m].x = x1;
x_line[m].y1 = y1;
x_line[m].flag = 1;
x_line[m++].y2 = y2;
point[m] = y2;
x_line[m].x = x2;
x_line[m].y1 = y1;
x_line[m].flag = -1;
x_line[m++].y2 = y2;
}
} void Point_Do()
{
int mi = 0;
sort(point+1,point+m,cmp);
sort(x_line+1,x_line+m,comp);
xm = m;
for(int i=1; i<m; i++)
{
if(point[i]!=point[mi]) point[++mi] = point[i]; //去重
}
m = mi;
} int Bin(int xi)
{
int l = 1, r = m;
int mi;
while(l<=r)
{
mi = (l+r)>>1;
if(xi = point[mi]) return mi;
if(xi > point[mi]) l = mi+1;
else r = mi-1;
}
return -1;
} void update(int l, int r, int k, line cur)
{
if(l==r-1)
{
if(tree[k].flag+cur.flag == 2) tree[k].f = cur.x;
else if(tree[k].flag+cur.flag<2 && cur.flag==-1){
tree[k].x += cur.x - tree[k].f;
tree[k].f = 0.0;
}
return;
}
int mi = (tree[k].l+tree[k].r)>>1;
if(l>mi) update(l,r,k+k+1,cur);
else if(r<=mi) update(l,r,k+k,cur);
else{
update(l,mi,k+k,cur);
update(mi+1,r,k+k+1,cur);
}
return;
} double query(int k)
{
if(tree[k].l+1==tree[k].r) return (point[tree[k].l]-point[tree[k].r])*tree[k].x;
return query(k+k)+query(k+k+1);
} int Ans()
{
for(int i=1;i<=xm;i++)
{
int x = Bin(x_line[i].y1);
int y = Bin(x_line[i].y2);
update(x,y,1,x_line[i]);
}
} int main()
{
Myscanf();
Point_Do();
Build(1,n,1);
Ans();
printf("%lf\n",query);
return 0;
}
Code From Hdu 1542
版权声明:本文为博主原创文章,未经博主允许不得转载。
Segment Tree 扫描线 分类: ACM TYPE 2014-08-29 13:08 89人阅读 评论(0) 收藏的更多相关文章
- 菜鸟学习-C语言函数参数传递详解-结构体与数组 分类: C/C++ Nginx 2015-07-14 10:24 89人阅读 评论(0) 收藏
C语言中结构体作为函数参数,有两种方式:传值和传址. 1.传值时结构体参数会被拷贝一份,在函数体内修改结构体参数成员的值实际上是修改调用参数的一个临时拷贝的成员的值,这不会影响到调用参数.在这种情况下 ...
- 给EditText的drawableRight属性的图片设置点击事件 分类: 学习笔记 android 2015-07-06 13:20 134人阅读 评论(0) 收藏
这个方法是通用的,不仅仅适用于EditText,也适用于TextView.AutoCompleteTextView等控件. Google官方API并没有给出一个直接的方法用来设置右边图片的点击事件,所 ...
- android开发之AlertDialog点击按钮之后不消失 分类: android 学习笔记 2015-07-15 18:07 89人阅读 评论(0) 收藏
最近有这样一个需求,我需要用户在一个弹出框里输入密码来验证,验证成功当然好说,但是如果验证失败则需要把alertdialog的标题改为"密码错误,请重新输入",并且这个alertd ...
- Segment Tree 分类: ACM TYPE 2014-08-29 13:04 97人阅读 评论(0) 收藏
#include<iostream> #include<cstdio> using namespace std; struct node { int l, r, m; int ...
- 山东理工大学第七届ACM校赛-学区房问题 分类: 比赛 2015-06-26 10:23 89人阅读 评论(0) 收藏
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 铁牌狗在学区B有一套面积为S1平方米的房子,现在他为了让后代进化成金牌狗,决定在学区A购 ...
- OC基础知识总结 分类: ios学习 OC 2015-06-26 17:58 58人阅读 评论(0) 收藏
//OC: Objective-C, 面向对象的C语言 //OC与C的区别 //1.OC是C的超集, C语言的所有语法都可以在OC中使用 //2.OC是面向对象 //3.OC是一门运行时语言 //4. ...
- Eclipse 快捷键大全 分类: C_OHTERS 2014-06-01 13:05 332人阅读 评论(0) 收藏
精选常用: 1. ctrl+shift+r:打开资源 这可能是所有快捷键组合中最省时间的了.这组快捷键可以让你打开你的工作区中任何一个文件,而你只需要按下文件名或mask名中的前几个字母,比如a ...
- *** glibc detected *** malloc(): memory corruption 分类: C/C++ Linux 2015-05-14 09:22 37人阅读 评论(0) 收藏
*** glibc detected *** malloc(): memory corruption: 0x09eab988 *** 发现是由于memset越界写引起的. 在Linux Server上 ...
- A Plug for UNIX 分类: POJ 图论 函数 2015-08-10 14:18 2人阅读 评论(0) 收藏
A Plug for UNIX Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 14786 Accepted: 4994 Desc ...
随机推荐
- 一个PHP邮件伪造脚本
xx.html <html> <head> <title>邮件欺骗</title> <body> <h3>社工必备-邮件欺骗&l ...
- 什么是PHP魔术引号
今天在读EcShop的源码中发现里面有几个地方涉及到了PHP魔术引号,之前也碰到过都忽略过去了,再次碰到该深入的理解,虽然自PHP 5.3.0 起魔术引号被废弃废弃并将自 PHP 5.4.0 起移除, ...
- 通过Messenger与后台连接(单向操作,activity向service发送数据)
xml: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:t ...
- ASP.NET MVC5学习笔记之Controller执行ControllerDescriptor和ActionDescriptor
一. ControllerDescriptor说明 ControllerDescriptor是一个抽象类,它定义的接口代码如下: public abstract class ControllerDes ...
- mini2440裸机之MMU(二)(mmu.c) (转)
分类: 嵌入式 http://blog.chinaunix.net/uid-26435987-id-3082166.html(转) /********************************* ...
- 如何解决android studio 运行时中文乱码的问题
相信很多朋友都会遇到android studio 在MAC OS中运行的时候中文乱码.而在代码编辑的时候正常.经过几天的不断寻找解决办法,终于解决了 比如: Toast.makeText(MainAc ...
- Android WebView代理设置方法(API10~21适用)
最近碰到个需求需要在APP中加入代理,HttpClient的代理好解决,但是WebView碰到些问题,然后找到个API10~API21都通用的类,需要用的同学自己看吧,使用方法,直接调用类方法setP ...
- 对 cloudwu 简单的 cstring 进行简单解析
题外话 以前也用C写过字符串,主要应用的领域是,大字符串,文件读取方面.写的很粗暴,用的凑合着.那时候看见云风前辈的一个开源的 cstring 串. 当时简单观摩了一下,觉得挺好的.也没细看.过了较长 ...
- EChart 关于图标控件的简单实用
1.下载前段框架并放入项目中去. 2.在js中调用 <!DOCTYPE html> <html lang="en"> <head> <me ...
- hdu 1429 胜利大逃亡(续)
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1429 胜利大逃亡(续) Description Ignatius再次被魔王抓走了(搞不懂他咋这么讨魔王 ...