hdu1255 覆盖的面积 线段树-扫描线
矩形面积并
线段树-扫描线裸题
- #include<stdio.h>
- #include<string.h>
- #include<algorithm>
- #include<math.h>
- using namespace std;
- const int maxm=2e3+;
- const double eps=1e-;
- struct seg{
- double x,y1,y2;
- int c;
- bool operator < (const seg a)const{
- return x<a.x;
- }
- }s[maxm];
- double y[maxm];
- double st[maxm<<],st2[maxm<<];
- int cov[maxm<<];
- void pushup(int o,int l,int r){
- if(cov[o]>){
- st[o]=st2[o]=y[r]-y[l];
- }
- else if(cov[o]==){
- st[o]=y[r]-y[l];
- if(l+==r)st2[o]=;
- else st2[o]=st[o<<]+st[o<<|];
- }
- else{
- if(l+==r)st[o]=st2[o]=;
- else{
- st[o]=st[o<<]+st[o<<|];
- st2[o]=st2[o<<]+st2[o<<|];
- }
- }
- }
- void update(int o,int l,int r,seg a){
- if(y[l]>=a.y1&&y[r]<=a.y2){
- cov[o]+=a.c;
- pushup(o,l,r);
- return;
- }
- if(l+==r)return;
- int m=l+((r-l)>>);
- if(a.y1<=y[m])update(o<<,l,m,a);
- if(a.y2>y[m])update(o<<|,m,r,a);
- pushup(o,l,r);
- }
- int main(){
- int T;
- scanf("%d",&T);
- while(T--){
- int n;
- scanf("%d",&n);
- memset(st,,sizeof(st));
- memset(cov,,sizeof(cov));
- memset(st2,,sizeof(st2));
- for(int i=;i<=n;++i){
- double x1,y1,x2,y2;
- scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2);
- /* s[2*i-1].x=x1;
- s[2*i].x=x2;
- s[2*i-1].y1=y1;
- s[2*i].y1=y1;
- s[2*i-1].y2=y2;
- s[2*i].y2=y2;
- s[2*i-1].c=1;
- s[2*i].c=-1;
- y[2*i-1]=y1;
- y[2*i]=y2;*/
- s[*i-].x=x1;s[*i-].y1=y1;s[*i-].y2=y2;s[*i-].c=;
- y[*i-]=y1;
- s[*i].x=x2;s[*i].y1=y1;s[*i].y2=y2;s[*i].c=-;
- y[*i]=y2;
- }
- sort(y+,y+*n+);
- sort(s+,s+*n+);
- /* int cnt=1;
- for(int i=2;i<=2*n;++i){
- if(y[i]!=y[i-1])y[++cnt]=y[i];
- }*/
- int cnt=*n;
- double ans=;
- update(,,cnt,s[]);
- for(int i=;i<=*n;++i){
- ans+=st2[]*(s[i].x-s[i-].x);
- update(,,cnt,s[i]);
- }
- printf("%.2lf\n",ans);
- }
- return ;
- }
hdu1255 覆盖的面积 线段树-扫描线的更多相关文章
- hdu1255 覆盖的面积 线段树+里离散化求矩形面积的交
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1255 求矩形面积的交的线段树题目,刚做了求并的题目,再做这个刚觉良好啊,只要再加一个表示覆盖次数大于1 ...
- HDU 1255 覆盖的面积 (线段树+扫描线+离散化)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1255 题意很清楚,就是让你求矩阵之间叠加层数大于1的矩形块的面积和. 因为n只有1000,所以我离散化 ...
- HDU 1255 覆盖的面积 线段树+扫描线
同 POJ1151 这次是两次 #include <iostream> #include <algorithm> #include <cstdio> #includ ...
- HDU1255 覆盖的面积 —— 求矩形交面积 线段树 + 扫描线 + 离散化
题目链接:https://vjudge.net/problem/HDU-1255 给定平面上若干矩形,求出被这些矩形覆盖过至少两次的区域的面积. Input输入数据的第一行是一个正整数T(1<= ...
- hdu 1255 覆盖的面积 (线段树处理面积覆盖问题(模板))
http://acm.hdu.edu.cn/showproblem.php?pid=1255 覆盖的面积 Time Limit: 10000/5000 MS (Java/Others) Memo ...
- H - 覆盖的面积(线段树-线段扫描 + 离散化(板题))
给定平面上若干矩形,求出被这些矩形覆盖过至少两次的区域的面积. Input 输入数据的第一行是一个正整数T(1<=T<=100),代表测试数据的数量.每个测试数据的第一行是一个正整数N(1 ...
- HDU 1255 覆盖的面积(线段树面积并)
描述 给定平面上若干矩形,求出被这些矩形覆盖过至少两次的区域的面积. Input 输入数据的第一行是一个正整数T(1<=T<=100),代表测试数据的数量.每个测试数据的第一行是一个正 ...
- HDU 1255 覆盖的面积(线段树:扫描线求面积并)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1255 题目大意:给你若干个矩形,让你求这些矩形重叠两次及以上的部分的面积. 解题思路:模板题,跟HDU ...
- hdu1255 矩阵的交 线段树+扫描线
/* 不是叶子节点 ,且cnt=1.注意这里,cnt=1确切的意义是什么, 应该是,可以确定,这个区间被完全覆盖了1次, 而有没有被完全覆盖两次或以上则不知道无法确定,那么怎么怎么办了, 只要加上t[ ...
随机推荐
- SSH Secure Shell Client--- the host may be dow
the host may be down,or there may be a problem with the network connection. Sometimes such problems ...
- WPF:改变ListBoxItem和ListViewItem的颜色
目录 1. 改变ListBoxItem颜色 2. ListViewItem的颜色设置 注意: 本文仅讨论默认ListBoxItem和ListViewItem的鼠标指向和被选择后的前景和背景颜色设置.如 ...
- Python解析Wav文件并绘制波形的方法
资源下载 #本文PDF版下载 Python解析Wav文件并绘制波形的方法 #本文代码下载 Wav波形绘图代码 #本文实例音频文件night.wav下载 音频文件下载 (石进-夜的钢琴曲) 前言 在现在 ...
- Hexo博客搭建教程
1.使用淘宝npm源 $ npm install -g cnpm --registry=https://registry.npm.taobao.org 2.安装hexo cnpm install -g ...
- 关于RM中的X3014错误,以及mul() 、天空盒
关于 error X3014: incorrect number of arguments to numeric-type constructor 这个错误应该是某个类似float4 这样的变量初始 ...
- 1.4 C++内联函数(inline)
参考:http://www.weixueyuan.net/view/6330.html C++语言新增关键字 inline,用于将一个函数声明为内联函数.在程序编译时,编译器会将内联函数调用处用函数体 ...
- DevExpress v17.2新版亮点—Windows 10篇
用户界面套包DevExpress v17.2日前终于正式发布,本站将以连载的形式为大家介绍各版本新增内容.本文将介绍了Windows 10 Controls v17.2 的新功能,快来下载试用新版本! ...
- MyEclipse WebSphere开发教程:安装和更新WebSphere 6.1, JAX-WS, EJB 3.0(五)
MyEclipse超值折扣 限量 100 套! 立即开抢>> [MyEclipse最新版下载] MyEclipse支持Java EE技术(如JAX-WS和EJB 3.0),它们以功能包的形 ...
- nginx对上传文件大小的限制
前几天项目组的一个小伙子过来跟我说,他本地上传的文件没问题,但是在测试环境上测试的时候上传失败. 后来发现时nginx对上传文件的大小做了限制,默认是1M,那么按照需求我们更改了限值为20M vi c ...
- kmp算法中的nextval实例解释
求nextval数组值有两种方法,一种是不依赖next数组值直接用观察法求得,一种方法是根据next数组值进行推理,两种方法均可使用,视更喜欢哪种方法而定. 本文主要分析nextval数组值的第二种方 ...