题目描述

离散化,线段树维护区间修改,发现询问都是单点的\(max\),不妨把标记留在点上,不用下传,查询时取个\(max\)就可以了

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<map>
#define lc (p<<1)
#define rc (p<<1|1)
using namespace std; const int MAXN=400010;
const int MAXM=1600010; inline int read(){
int x=0,f=1; char c=getchar();
while(c<'0'){ if(c=='-') f=-1; c=getchar(); }
while(c>='0') x=x*10+c-'0',c=getchar();
return x*f;
} int n,x[MAXN],cnt,num; struct Data{
int l,r,h;
} a[MAXN]; map<int,int> Map; int tree[MAXM],rev[MAXN]; inline void update(int L,int R,int h,int p=1,int l=1,int r=num){
if(L<=l&&r<=R){
tree[p]=max(tree[p],h);
return;
}
int mid=(l+r)>>1;
if(L<=mid) update(L,R,h,lc,l,mid);
if(R>mid) update(L,R,h,rc,mid+1,r);
} inline int query(int x,int p=1,int l=1,int r=num){
if(l==r) return tree[p];
int mid=(l+r)>>1,ans=tree[p];
if(x<=mid) ans=max(ans,query(x,lc,l,mid));
else ans=max(ans,query(x,rc,mid+1,r));
return ans;
} inline bool cmp(Data x,Data y){
if(x.l!=y.l)
return x.l<y.l;
return x.r<y.r;
} int ansx[MAXN],ansy[MAXN],ansnum; int main(){
n=read();
for(int i=1;i<=n;++i)
a[i].h=read(),a[i].l=read(),a[i].r=read(),--a[i].r;
sort(a+1,a+1+n,cmp);
for(int i=1;i<=n;++i){
x[++cnt]=a[i].l;
x[++cnt]=a[i].l+1;
x[++cnt]=a[i].r;
x[++cnt]=a[i].r+1;
}
x[0]=x[1]-1;
sort(x+1,x+1+cnt);
for(int i=1;i<=cnt;++i)
if(x[i]!=x[i-1]) Map[x[i]]=++num,rev[num]=x[i];
++num;
for(int i=1;i<=n;++i)
update(Map[a[i].l],Map[a[i].r],a[i].h);
int last=0;
for(int i=1;i<=num;++i){
int tmp=query(i);
if(tmp!=last){
if(tmp>last){
ansx[++ansnum]=rev[i],ansy[ansnum]=last;
ansx[++ansnum]=rev[i],ansy[ansnum]=tmp;
}
else{
ansx[++ansnum]=rev[i-1]+1,ansy[ansnum]=last;
ansx[++ansnum]=rev[i-1]+1,ansy[ansnum]=tmp;
}
last=tmp;
}
}
printf("%d\n",ansnum);
for(int i=1;i<=ansnum;++i)
printf("%d %d\n",ansx[i],ansy[i]);
return 0;
}

【luoguP1382】楼房的更多相关文章

  1. AC日记——楼房 codevs 2995

    2995 楼房  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Description 地平线(x轴)上有n个矩(lou ...

  2. Bzoj2957 楼房重建

    Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1516  Solved: 723[Submit][Status][Discuss] Descripti ...

  3. 【清华集训】楼房重建 BZOJ 2957

    Description 小A的楼房外有一大片施工工地,工地上有N栋待建的楼房.每天,这片工地上的房子拆了又建.建了又拆.他经常无聊地看着窗外发呆,数自己能够看到多少栋房子. 为了简化问题,我们考虑这些 ...

  4. 扫描线+堆 codevs 2995 楼房

    2995 楼房  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description 地平线(x轴)上有n个矩(lou)形(fan ...

  5. BZOJ 2957 楼房重建

    Description 小A的楼房外有一大片施工工地,工地上有N栋待建的楼房.每天,这片工地上的房子拆了又建.建了又拆.他经常无聊地看着窗外发呆,数自己能够看到多少栋房子. 为了简化问题,我们考虑这些 ...

  6. [BZOJ 2957]楼房重建(THU2013集训)(分块思想)

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2957 分析: 首先明确问题,对于每栋楼房的斜率K=H/X,问题就是问有多少个楼房的K比前面所有 ...

  7. bzoj 2957: 楼房重建 线段树

    2957: 楼房重建 Time Limit: 10 Sec  Memory Limit: 256 MB[Submit][Status][Discuss] Description 小A的楼房外有一大片施 ...

  8. [bzoj2957][楼房重建] (线段树)

    Description 小A的楼房外有一大片施工工地,工地上有N栋待建的楼房.每天,这片工地上的房子拆了又建.建了又拆.他经常无聊地看着窗外发呆,数自己能够看到多少栋房子. 为了简化问题,我们考虑这些 ...

  9. 【题解】Luogu P4198 楼房重建

    原题传送门 根据斜率来建线段树,线段树维护区间最大斜率以及区间内能看见的楼房的数量(不考虑其他地方的原因,两个节点合并时再考虑) 细节见程序 #include <bits/stdc++.h> ...

随机推荐

  1. 集合类源码(五)Collection之BlockingQueue(LinkedTransferQueue, PriorityBlockingQueue, SynchronousQueue)

    LinkedTransferQueue 功能 全名 public class LinkedTransferQueue<E> extends AbstractQueue<E> i ...

  2. 图解微信小程序---实现页面的跳转与返回操作

    图解微信小程序---实现页面的跳转与返回操作 代码笔记 操作步骤 第一步:在app.json配置文件中,创建跳转页面 第二步:编写首页跳转(注意跳转方式,和设置点击样式类名) 第三步:编写首页样式 第 ...

  3. 【05】Jenkins:用户权限管理

    写在前面的话 在一个企业研发部门内部,可能存在多个运维人员,而这些运维人员往往负责不同的项目,但是有可能他们用的又是同一个 Jenkins 的不同用户.那么我们就希望实现一个需求,能够不同的用户登录 ...

  4. 配置ssl使用了不受支持的协议。 ERR_SSL_VERSION_OR_CIPHER_MISMATCH

    使用了不受支持的协议. ERR_SSL_VERSION_OR_CIPHER_MISMATCH 协议不受支持 客户端和服务器不支持一般 SSL 协议版本或加密套件.   类似的这种提示   免费版百度云 ...

  5. Oracle的数据类型和表的操作

    学习笔记: Oracle数据类型 1.创建表 ---创建一个person表 create table person( pid ), pname ) ); 2.修改表结构 --添加一列 )); --修改 ...

  6. 2019年,Golang开始吊打Java性能了!!!

    最近要同事debug性能,不经意间发现现在Golang性能开始吊打Java了!!!感觉Go发展神速!! 之前Go和Java基本是平手,甚至还有较大差距,请见https://www.cnblogs.co ...

  7. JS 弹窗“是否删除”

    var r = confirm("是否确认删除!");if (r == true) {location.href = "/Employees/Delete/" ...

  8. VirtualBox安装Ubuntu-18.04-Server笔记

    准备 安装'Windows Terminal' 安装WSL 安装VirtualBox 安装 虚拟磁盘映像文件选择创建在SSD(如果有) 选择openssh,公钥从GitHub获取,前提是GitHub已 ...

  9. Android.mk 使用说明

    Android.mk 详解https://blog.csdn.net/dearsq/article/details/50585537  Android.mk中的主要配置参数: 1.LOCAL_JACK ...

  10. 百度地图API操作实战

    什么是百度地图API: 百度地图API是为开发者免费提供的一套基于百度地图服务的应用接口,包括JavaScript API,web服务API,Android等多种开发工具服务.提供基本地图展现,搜索, ...