G - 楼房重建 (线段树)
题目链接:https://cn.vjudge.net/contest/281960#problem/G
题目大意:中文问题
具体思路:首先每一个点的值可以用当前这个点的斜率来表示,每一次输入一个值,我们先看当前这个点之前的区域中有多少点是小于当前这个点的斜率的,这样每一次查询就可以了。
查询的时候:首先对于当前的点的左区间,肯定是包含关系,对于右区间的话,需要考虑到左区间会遮挡住右区间的情况。
我们就按照递归的形式,如果说当前的maxx[rt]<=val,我们就再去查询这个区间的右区间,看看这一段有没有符合的。
其次的话,我们就每一次判断左区间有多少符合的就可以了。
AC代码:
#include<bits/stdc++.h>
using namespace std;
# define ll long long
# define lson l,m,rt<<
# define rson m+,r,rt<<|
const int maxn = 6e5+;
int ans[maxn];
double maxx[maxn];
int cal(int l,int r,int rt,double val)
{
if(l==r)
return maxx[rt]>val;
int m=(l+r)>>;
if(maxx[rt<<]<=val)
return cal(rson,val);
return ans[rt]-ans[rt<<]+cal(lson,val);
}
void up(int l,int r,int rt)
{
maxx[rt]=max(maxx[rt<<],maxx[rt<<|]);
int m=(l+r)>>;
ans[rt]=ans[rt<<]+cal(rson,maxx[rt<<]);
}
void update(int l,int r,int rt,int pos,double val)
{
if(l==r)
{
ans[rt]=;
maxx[rt]=val;
return ;
}
int m=(l+r)>>;
if(pos<=m)
update(lson,pos,val);
if(pos>m)
update(rson,pos,val);
up(l,r,rt);
}
int main()
{
int n,m,t1,t2;
scanf("%d %d",&n,&m);
for(int i=; i<=m; i++)
{
scanf("%d %d",&t1,&t2);
update(,n,,t1,(t2*1.0)/(t1*1.0));
printf("%d\n",ans[]);
}
return ;
}
G - 楼房重建 (线段树)的更多相关文章
- [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栋待建的楼房.每天,这片工地上的房子拆了又建.建了又拆.他经常无聊地看着窗外发呆,数自己能够看到多少栋房子. 为了简化问题,我们考虑这些事件发生在一个 ...
- bzoj2957 楼房重建——线段树
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2957 线段树维护两个值:cnt 能看到的最多楼房数: mx 最大斜率数: 对于一段区间,从左 ...
- bzoj 2957 楼房重建 (线段树+思路)
链接: https://www.lydsy.com/JudgeOnline/problem.php?id=2957 思路: 用分块可以很简单的过掉,但是这道题也可以用线段树写. 分类讨论左区间最大值对 ...
- 洛谷P4198 楼房重建(线段树)
题意 题目链接 Sol 别问我为什么发两遍 就是为了骗访问量 这个题的线段树做法,,妙的很 首先一个显然的结论:位置\(i\)能被看到当且仅当\(\frac{H_k}{k} < \frac{H_ ...
- BZOJ 2957 楼房重建(线段树区间合并)
一个显而易见的结论是,这种数字的值是单调递增的.我们修改一个数只会对这个数后面的数造成影响.考虑线段树划分出来的若干线段. 这里有两种情况: 1.某个线段中的最大值小于等于修改的数,那么这个线段的贡献 ...
- [BZOJ2957] 楼房重建 (线段树,递归)
题目链接 Solution 经典的一道线段树题,难点在于如何合并节点. 由于题目要求直线要求不相交,则斜率均大于前面的点即为答案. 所以以斜率为权值. 考虑线段树每一个节点维护两个值: \(Max\) ...
随机推荐
- Web项目替换jar包中的文件的方法
经常遇到这样的问题,需要修改jar包中的方法.应该如何做? 1.有些很人性化的框架jar包,比如SpringSecurity,可以修改配置文件指定一个新建的类,让类实现Jar包中的对应的接口就好了. ...
- Leetcode 237.删除链表中的节点 By Python
请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点. 现有一个链表 -- head = [4,5,1,9],它可以表示为: 4 -> 5 -> 1 - ...
- android 图片处理经验分享
在设置ImageView资源的时候,这时的图片是来自SD卡,查看API很容易就会看到view.setImageUri(Uri u)这个函数.所以一般会这样写: ImageView view = (I ...
- [luogu1912][bzoj4196][NOI2015]软件管理器
题解 树剖模板题,每次改变是\(1\)或者是\(0\),区间求和和区间修改就可了. ac代码 # include <cstdio> # include <cstring> # ...
- [AHOI2014/JSOI2014] 解题报告
[AHOI2014/JSOI2014] 奇怪的计算器 一个很关键的结论,任何时候每个数的相对大小是不变的. 于是可以把这个相对大小当成线段树的权值,每次只需要维护一下区间极值和tag就好了,关于操作四 ...
- 【codeforces 335E】 Counting Skyscrapers
http://codeforces.com/problemset/problem/335/E (题目链接) 题意 懒得写了= = Solution 这题咋不上天= =. 参考题解:http://blo ...
- spread与react
我们写react组件的过程中会遇到这个 我们知道react中的{},浏览器会知道说是以js的形式进行解析出来.那么怎么解析...props呢? 这个就涉及到es6中的扩展运算符了,我们先看下面的一些运 ...
- 外显子分析弹错解决方案:Invalid command line: Cannot process the provided BAM/CRAM file(s) because they were not indexed.
出现这种问题说明bam/cram文件没有进行index. Samtool能解决这个问题,以bam文件为例,输入以下命令行即可解决问题: /path/to/your/samtools index fil ...
- Iptables防火墙规则使用
iptables是组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤.封包重定向和网络地址转换(NAT)等功能 ...
- Scala进阶之路-Spark独立模式(Standalone)集群部署
Scala进阶之路-Spark独立模式(Standalone)集群部署 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们知道Hadoop解决了大数据的存储和计算,存储使用HDFS ...