博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj 3277 City Horizon
阅读量:5201 次
发布时间:2019-06-13

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

经典的矩形面积并  对y离散后 建树 用拆点后的以x为顺序  依次更新

代码:

#include
#include
#include
#include
#include
#include
#include
#include
#include
#define LL long longusing namespace std;const int N=40005;struct node{ int l,r; LL H;//这个高度主要是用来查找的 LL h;//这一段的最高度 int cover;//被覆盖次数}mem[N*4];LL Y[N*2];//高度struct poin{ int k; LL x; LL h;}point[N*2];//拆点 k 表示左点 还是右点bool cmp(poin a,poin b){ if(a.x==b.x) return a.h
y) return x; return y;}void build(int x,int l,int r){ mem[x].cover=0; mem[x].l=l; mem[x].r=r; mem[x].h=0; if(l==r) { mem[x].H=Y[l]; return ; } int mid=(l+r)>>1; build(x*2,l,mid); build(x*2+1,mid+1,r); mem[x].H=Lmax(mem[x*2].H,mem[x*2+1].H);//更新最高度}void add(int x,int k){ if(mem[x].l==mem[x].r) { mem[x].cover+=point[k].k;//更新cover if(mem[x].cover>0)//大于0 为有覆盖 所以高度为 H 否则为0 mem[x].h=mem[x].H; else mem[x].h=0; return ; } if(Labs(point[k].h)<=mem[x*2].H) add(x*2,k); else add(x*2+1,k); mem[x].h=Lmax(mem[x*2].h,mem[x*2+1].h);//更新}int main(){ // freopen("data.txt","r",stdin); int n; while(scanf("%d",&n)!=EOF) { for(int i=0;i

 

转载于:https://www.cnblogs.com/liulangye/archive/2012/08/01/2618510.html

你可能感兴趣的文章
Python与数据结构[3] -> 树/Tree[2] -> AVL 平衡树和树旋转的 Python 实现
查看>>
项目管理
查看>>
【Java数据结构】Java数据结构之链表反转
查看>>
UVALive 4394 String painter
查看>>
hdu 4620 Fruit Ninja Extreme
查看>>
java基础练习 6
查看>>
Struts dispatchAction
查看>>
plt绘制 2维、3维散点图
查看>>
.NET CORE API Swagger
查看>>
DevExpress设置默认皮肤及各种皮肤样式
查看>>
2016 - 1 - 21 RunloopMode中的Source 与Observer
查看>>
C# 调用 C++ dll (类型对照)
查看>>
关于thinkphp的__construct和_initialize
查看>>
JSP之应用Servlet过滤器进行身份验证
查看>>
HelloWorld !
查看>>
HDU 2952 Counting Sheep
查看>>
九度oj 1420:Jobdu MM分水果
查看>>
unbuntu 常用命令集合
查看>>
QT在windows平台安装使用MInGW编译
查看>>
proguard使用
查看>>