Luogu P4198 楼房重建 (李超线段树)
题目
题解
首先转化成到(0,0)(0,0)(0,0)的斜率。
那么就是求多少个点是前缀最大值。
做法是线段树,用gao(i,x)gao(i,x)gao(i,x)表示在iii区间内,之前最大值为xxx的答案。

然后发现gao(p→r,p→l→max)gao(p\to r,p\to l\to max)gao(p→r,p→l→max)就是gao(p,0)−gao(p→l,0)gao(p,0)-gao(p\to l,0)gao(p,0)−gao(p→l,0),所以直接用数组存一下gao(i,0)gao(i,0)gao(i,0)。代码极短,30行。
CODE
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100005;
int n, m, ans[MAXN<<2];
double mx[MAXN<<2];
int query(int i, int l, int r, double v) {
	if(l == r) return mx[i] > v;
	if(mx[i] <= v) return 0;
	int mid = (l + r) >> 1;
	if(mx[i<<1] <= v) return query(i<<1|1, mid+1, r, v);
	return query(i<<1, l, mid, v) + ans[i]-ans[i<<1];
}
void mdf(int i, int l, int r, int x, double v) {
	if(l == r) { mx[i] = v; ans[i] = 1; return; }
	int mid = (l + r) >> 1;
	if(x <= mid) mdf(i<<1, l, mid, x, v);
	else mdf(i<<1|1, mid+1, r, x, v);
	mx[i] = max(mx[i<<1], mx[i<<1|1]);
	ans[i] = ans[i<<1] + query(i<<1|1, mid+1, r, mx[i<<1]);
}
int main () {
	scanf("%d%d", &n, &m);
	int x, y;
	while(m--) {
		scanf("%d%d", &x, &y);
		mdf(1, 1, n, x, 1.0*y/x);
		printf("%d\n", ans[1]);
	}
}
												
											Luogu P4198 楼房重建 (李超线段树)的更多相关文章
- 洛谷 P4198 楼房重建 线段树维护单调栈
		
P4198 楼房重建 题目链接 https://www.luogu.org/problemnew/show/P4198 题目描述 小A的楼房外有一大片施工工地,工地上有N栋待建的楼房.每天,这片工地上 ...
 - 【洛谷】P4198 楼房重建(线段树)
		
传送门 分析 被线段树按在地上摩擦 先把左边转化成斜率,那么这个题就转化成每次修改一个点的值,输出前缀最大值的个数 看到标签是线段树,所以还是想想线段树的做法吧 既然是线段树,那么就要将区间分成两半 ...
 - 【BZOJ2957】楼房重建(线段树)
		
[BZOJ2957]楼房重建(线段树) 题面 BZOJ 题解 对于整个区间维护最大斜率以及只考虑这个区间的答案 考虑如何向上合并. 首先左半段的答案是一定存在的 所以,现在的问题就是右半段能够贡献的答 ...
 - BZOJ_2957_楼房重建_线段树
		
BZOJ_2957_楼房重建_线段树 Description 小A的楼房外有一大片施工工地,工地上有N栋待建的楼房.每天,这片工地上的房子拆了又建.建了又拆.他经常无聊地看着窗外发呆,数自己能够看到多 ...
 - Luogu P4097 [HEOI2013]Segment 李超线段树
		
题目链接 \(Click\) \(Here\) 李超线段树的模板.但是因为我实在太\(Naive\)了,想象不到实现方法. 看代码就能懂的东西,放在这里用于复习. #include <bits/ ...
 - luogu P4198 楼房重建——线段树
		
题目大意: 小A在平面上(0,0)点的位置,第i栋楼房可以用一条连接(i,0)和(i,Hi)的线段表示,其中Hi为第i栋楼房的高度.如果这栋楼房上任何一个高度大于0的点与(0,0)的连线没有与之前的线 ...
 - [Luogu P4198]楼房重建(线段树)
		
题目描述 小A的楼房外有一大片施工工地,工地上有N栋待建的楼房.每天,这片工地上的房子拆了又建.建了又拆.他经常无聊地看着窗外发呆,数自己能够看到多少栋房子. 为了简化问题,我们考虑这些事件发生在一个 ...
 - Luogu P4198 楼房重建 分块 or 线段树
		
思路:分块 提交:2次(第一次的求解有问题) 题解: 设块长为$T$,我们开$N/T$个单调栈,维护每一块的上升斜率. 修改时暴力重构整个块,$O(T)$ 求解时记录一个最大斜率$lst$,然后块内二 ...
 - 【BZOJ 2957】 2957: 楼房重建 (线段树)
		
2957: 楼房重建 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1753 Solved: 841 Description 小A的楼房外有一大片施 ...
 
随机推荐
- LeetCode 172. 阶乘后的零(Factorial Trailing Zeroes)
			
172. 阶乘后的零 172. Factorial Trailing Zeroes 题目描述 给定一个整数 n,返回 n! 结果尾数中零的数量. LeetCode172. Factorial Trai ...
 - [转帖]crontab每小时运行一次
			
crontab每小时运行一次 先给出crontab的语法格式 对于网上很多给出的每小时定时任务写法,可以说绝大多数都是错误的!比如对于下面的这种写法: 00 * * * * #每隔一小时执行一 ...
 - 关于wireshark的过滤器规则学习小结
			
关于wireshark的过滤器规则学习小结 [前言] 这两天一直在熟悉wireshark的过滤器语法规则,以前也接触过这个工具,但只是学校老师教的如何去选择一个接口进行抓取,以及如何去分析一个包的数据 ...
 - ElasticSearch RestHighLevelClient 通用操作
			
项目中使用到ElasticSearch作为搜索引擎.而ES的环境搭建自然是十分简单,且本身就适应于分布式环境,因此这块就不多赘述.而其本身特性和查询语句这篇博文不会介绍,如果有机会会深入介绍.  所 ...
 - PAT(A) 1144 The Missing Number(C)统计
			
题目链接:1144 The Missing Number (20 point(s)) Description Given N integers, you are supposed to find th ...
 - K  number(思维和后缀以及3的特性)(2019牛客暑期多校训练营(第四场))
			
示例1: 输入:600 输出:4 说明:'600', '0', '0', '00' are multiples of 300. (Note that '0' are counted twice bec ...
 - dotnet Core学习之旅(二):安装IDE
			
[重要:文中所有外链不能确保永久有效] >开发工具 高效的开发必然需要一个优秀的集成开发环境(IDE) 对于.NET Core 2.x可以使用包括但不限于以下IDE来进行开发. Visual S ...
 - CCF 2017-03-1 分蛋糕
			
CCF 2017-03-1 分蛋糕 题目 问题描述 小明今天生日,他有n块蛋糕要分给朋友们吃,这n块蛋糕(编号为1到n)的重量分别为a1, a2, -, an.小明想分给每个朋友至少重量为k的蛋糕.小 ...
 - Chrome安装crx文件的插件时出现“程序包无效”
			
有趣的事,Python永远不会缺席! 如需转发,请注明出处:小婷儿的python https://www.cnblogs.com/xxtalhr/p/11043453.html 链接:https: ...
 - sql server 游标和with as使用
			
) --声明变量,需要读取的数据 DECLARE cur CURSOR --去掉STATIC关键字即可 FOR WITH Emp AS (SELECT acc.* FROM GXSpreadDB.db ...