bzoj2957楼房重建——线段树
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2957
线段树维护原点到楼顶的斜率,可以知道答案就是从原点开始斜率递增的个数;
记录一个mx数组表示这一段上最大的斜率,二分,分类讨论,递归求解;
而且如果要取rs的长度,不是直接取tr[rs],而是总长度减去tr[ls],因为不能从右边一段的起点开始……
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int const MAXN=;
int n,m,tr[MAXN<<];
double xl[MAXN],mx[MAXN<<];
int find(int x,int l,int r,double w)
{
if(l==r)return xl[l]>w;
int ls=(x<<),rs=(x<<|);
int mid=((l+r)>>);
if(mx[ls]>w)return tr[x]-tr[ls]+find(ls,l,mid,w);
return find(rs,mid+,r,w);
}
void pushup(int x,int l,int r)
{
int mid=((l+r)>>);
int ls=(x<<),rs=(x<<|);
if(mx[ls]>=mx[rs])tr[x]=tr[ls],mx[x]=mx[ls];
else if(mx[ls]<xl[mid+])tr[x]=tr[ls]+tr[rs],mx[x]=mx[rs];
else
{
tr[x]=tr[ls]+find(rs,mid+,r,mx[ls]);
mx[x]=mx[rs];
}
}
void add(int nw,int L,int R,int l,int r,double w)
{
if(l==r)
{
tr[nw]=;mx[nw]=w;//!!!注意别把nw写成l
return;
}
int mid=((l+r)>>);
if(mid>=L)add(nw<<,L,R,l,mid,w);
if(mid<R)add(nw<<|,L,R,mid+,r,w);
pushup(nw,l,r);
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=,x;i<=m;i++)
{
double y;
scanf("%d%lf",&x,&y);
xl[x]=y/x;
add(,x,x,,n,xl[x]);
printf("%d\n",tr[]);
}
return ;
}
bzoj2957楼房重建——线段树的更多相关文章
- bzoj2957 楼房重建——线段树
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2957 线段树维护两个值:cnt 能看到的最多楼房数: mx 最大斜率数: 对于一段区间,从左 ...
- [BZOJ2957] 楼房重建 (线段树,递归)
题目链接 Solution 经典的一道线段树题,难点在于如何合并节点. 由于题目要求直线要求不相交,则斜率均大于前面的点即为答案. 所以以斜率为权值. 考虑线段树每一个节点维护两个值: \(Max\) ...
- [bzoj2957][楼房重建] (线段树)
Description 小A的楼房外有一大片施工工地,工地上有N栋待建的楼房.每天,这片工地上的房子拆了又建.建了又拆.他经常无聊地看着窗外发呆,数自己能够看到多少栋房子. 为了简化问题,我们考虑这些 ...
- [BZOJ29957] 楼房重建 - 线段树
2957: 楼房重建 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 3294 Solved: 1554[Submit][Status][Discus ...
- bzoj 2957: 楼房重建 线段树
2957: 楼房重建 Time Limit: 10 Sec Memory Limit: 256 MB[Submit][Status][Discuss] Description 小A的楼房外有一大片施 ...
- luogu P4198 楼房重建——线段树
题目大意: 小A在平面上(0,0)点的位置,第i栋楼房可以用一条连接(i,0)和(i,Hi)的线段表示,其中Hi为第i栋楼房的高度.如果这栋楼房上任何一个高度大于0的点与(0,0)的连线没有与之前的线 ...
- bzoj 2957: 楼房重建 ——线段树
Description 小A的楼房外有一大片施工工地,工地上有N栋待建的楼房.每天,这片工地上的房子拆了又建.建了又拆.他经常无聊地看着窗外发呆,数自己能够看到多少栋房子. 为了简化问题,我们考虑这些 ...
- [Luogu P4198]楼房重建(线段树)
题目描述 小A的楼房外有一大片施工工地,工地上有N栋待建的楼房.每天,这片工地上的房子拆了又建.建了又拆.他经常无聊地看着窗外发呆,数自己能够看到多少栋房子. 为了简化问题,我们考虑这些事件发生在一个 ...
- bzoj 2957 楼房重建 (线段树+思路)
链接: https://www.lydsy.com/JudgeOnline/problem.php?id=2957 思路: 用分块可以很简单的过掉,但是这道题也可以用线段树写. 分类讨论左区间最大值对 ...
随机推荐
- 【转】supervisord使用
Supervisor (http://supervisord.org) 是一个用 Python 写的进程管理工具,可以很方便的用来启动.重启.关闭进程(不仅仅是 Python 进程).除了对单个进程的 ...
- 【每日Scrum】第二天(4.12) TD学生助手Sprint1站立会议
TD学生助手Sprint1站立会议(4.12) 任务看板 站立会议内容 组员 昨天 今天 困难 签到 刘铸辉 (组长) 做了几个Sqlite编辑事件导入数据库没成功,就编辑图片滑动显示功能 今天学习了 ...
- Centos 安装Puppet
环境说明: OS:CentOS 5.4 i386puppetmaster 192.168.0.12 hostname: puppetmaster.info.comclient ...
- Centos7-安装Weblogic并配置 domain
1.创建用户组 [root@localhost weblogic]# groupadd weblogic 2.创建 tmn 用户 [root@localhost weblogic]# useradd ...
- javascript点滴积累
1. javascript中的array, set, map 均为数据容器,使用iterable内置的forEach方法 var a = ['A', 'B', 'C'];a.forEach(funct ...
- 解压 boot.img
./split_bootimg.pl boot.img Page size: 2048 (0x00000800) Kernel size: 7062084 (0x006bc244) Ramdisk s ...
- 实记处理mongodb的NUMA问题
一次在启动mongodb的过程中,出现过NUMA这个问题, mongodb日志显示如下: WARNING: You are running on a NUMA machine. We suggest ...
- Hadoop实战-Flume之Hello world(九)
环境介绍: 主服务器ip:192.168.80.128 1.准备apache-flume-1.7.0-bin.tar文件 2.上传到master(192.168.80.128)服务器上 3.解压apa ...
- 记录一次MySQL两千万数据的大表优化解决过程,提供三种解决方案(转)
问题概述 使用阿里云rds for MySQL数据库(就是MySQL5.6版本),有个用户上网记录表6个月的数据量近2000万,保留最近一年的数据量达到4000万,查询速度极慢,日常卡死.严重影响业务 ...
- CentOS 更换 usr 挂载分区
由于之前挂载在/usr目录的分区空间过小,无法安装更多需要的软件,现在添加一块硬盘重新挂载在/usr目录,并将之前/usr 目录下的内容(包括权限.连接等)完整拷贝到新磁盘分区的/usr目录. 操作系 ...