博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
线段树-矩形面积求并
阅读量:5274 次
发布时间:2019-06-14

本文共 1824 字,大约阅读时间需要 6 分钟。

题目描述:

给定很多个矩形,给定方式是对角线坐标点.求面积的并。

大致思路:

扫描线+线段树;

1 #include 
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 10 using namespace std; 11 typedef long long int LL; 12 const int INF=2e9+1e8; 13 14 15 16 const int maxn=1e6+10; 17 18 19 struct Date 20 { 21 double l,r,high; 22 int flag; //false 为 下面的边 23 } data[maxn]; 24 double myh[maxn],input[maxn]; 25 int n,k; 26 int getid(double x) 27 { 28 return lower_bound(myh+1,myh+k,x)-myh; 29 } 30 /** 31 * 32 * 线段树 33 * 34 */ 35 struct Seg 36 { 37 int l,r,val; 38 double res; 39 } Tree[maxn]; 40 void build(int i,int l,int r) 41 { 42 Tree[i].l=l,Tree[i].r=r; 43 Tree[i].val=0,Tree[i].res=0; 44 if(l==r) return ; 45 int mid=(l+r)>>1; 46 build(i<<1,l,mid); 47 build(i<<1|1,mid+1,r); 48 } 49 void deal(int i) 50 { 51 if(Tree[i].val) Tree[i].res=myh[Tree[i].r+1]-myh[Tree[i].l]; 52 else if(Tree[i].l==Tree[i].r) Tree[i].res=0.; 53 else Tree[i].res=Tree[i<<1].res+Tree[i<<1|1].res; 54 } 55 void update(int i,int l,int r,int x) // 更新区间,并维护投影长度和, 56 { 57 if(l>r) return ; 58 if(Tree[i].l==l&&Tree[i].r==r) 59 { 60 Tree[i].val+=x; 61 deal(i); 62 return ; 63 } 64 int mid=(Tree[i].l+Tree[i].r)>>1; 65 if(r<=mid) update(i<<1,l,r,x); 66 else if(l>mid) update(i<<1|1,l,r,x); 67 else update(i<<1,l,mid,x),update(i<<1|1,mid+1,r,x); 68 deal(i); 69 } 70 71 double solve() 72 { 73 double ans=0; 74 update(1,getid(data[0].l),getid(data[0].r)-1,1); 75 76 for(int i=1; i<2*n; i++) 77 { 78 ans+=Tree[1].res*(data[i].high-data[i-1].high); 79 update(1,getid(data[i].l),getid(data[i].r)-1,data[i].flag); 80 } 81 return ans; 82 } 83 bool cmp(Date a,Date b) 84 { 85 return a.high

 

 

转载于:https://www.cnblogs.com/coded-ream/p/7207922.html

你可能感兴趣的文章
leetcode33 Search in Rotated Sorted Array
查看>>
特征缩放
查看>>
验证(Javascript和正则表达式)
查看>>
js中字符串和json数组的相互转换
查看>>
PHP5之前的构造函数与PHP5之后的构造函数的区别
查看>>
mysql基础
查看>>
linux命令
查看>>
CSS hack
查看>>
js几个小技巧和坑
查看>>
OSPF相关知识与实例配置【第一部分】
查看>>
JVM监控远程服务器
查看>>
python glob删除目录下的文件
查看>>
网络配置文件详解
查看>>
Tomcat部署Web应用的两种方式
查看>>
阅读《effective java-第17条》遇到的问题解决与分享
查看>>
什么时候用GET?什么时候用POST?
查看>>
VS上编译Lua5.1.4生成静态库
查看>>
JS常用方法函数整理
查看>>
软件工程网上的第一次作业
查看>>
AFN Post方法 设置请求头(json)
查看>>