题目描述

离散化,线段树维护区间修改,发现询问都是单点的\(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. Skywalking入门介绍,skywalking6.5.0 +mysql (windows) 搭建

    一. 介绍 1. 基本信息 SkyWalking 创建于2015年,提供分布式追踪功能.从5.x开始,项目进化为一个完成功能的Application Performance Monitoring系统. ...

  2. python 做词云图

    #导入需要模块 import jieba import numpy as np import matplotlib.pyplot as plt from PIL import Image from w ...

  3. Python '\r', '\n', '\r\n' 的彻底理解

    回车和换行的历史: 机械打字机有回车和换行两个键作用分别是: 换行就是把滚筒卷一格,不改变水平位置.   (即移到下一行,但不是行首,而是和上一行水平位置一样) 回车就是把水平位置复位,不卷动滚筒.  ...

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

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

  5. mongodb 更新数据时int32变为double的解决办法

       场景: 在命令手动的修改签到表的整型字段synState,multi参数是可以更新多条,如果是false则更新一条. db.getCollection("ClassRecordOneD ...

  6. pod install速度慢,pod repo update 速度慢解决方法

    相信大家已经感受到pod install速度越来越慢了,网上提供了几种解决方案,但是都没有完全解决速度慢的问题. 使用国内镜像的Specs 在pod install时使用命令pod install - ...

  7. Springboot项目中pom.xml的Oracle配置错误问题

    这几天刚开始学习Springboot碰见各种坑啊,这里记录一个添加Oracle引用的解决方案. 前提:开发工具IDEA2019.2,SpringBoot,maven项目:Oracle版本是Oracle ...

  8. FCC-学习笔记 DNA Pairing

    FCC-学习笔记  DNA Pairing 1>最近在学习和练习FCC的题目.这个真的比较的好,推荐给大家. 2>中文版的地址:https://www.freecodecamp.cn/;英 ...

  9. i春秋——“百度杯”CTF比赛 九月场——Test(海洋cms / seacms 任意代码执行漏洞)

    打开发现是海洋cms,那就搜索相关漏洞 找到一篇介绍海洋cms的命令执行漏洞的文章:https://www.jianshu.com/p/ebf156afda49 直接利用其中给出的poc /searc ...

  10. Go语言学习——三分钟看透iota

    源起枚举 最近做需求时,有一个需要枚举的场景,大概有10+个枚举类型,不愿意像定义一个开关那样敷衍的写成 const ( SwitchOff = 0 SwitchOn = 1 ) 显得不够精致~ 于是 ...