尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

P4198 楼房重建 分析

P4198 楼房重建 分析
📅 发布时间:2026/6/19 10:23:56

题目概述

题目链接:https://www.luogu.com.cn/problem/P4198。

给出一个 \(x\) 轴长度为 \(n\),\(y\) 轴长度为 \(10^9\) 的二维平面。

一共有 \(n\) 天,第 \(i\) 天令坐标为 \(x_i\) 的线段变长为 \(y_i\)(屋顶就到了 \((x_i,y_i)\)),然后每一天你都要询问从 \((0,0)\) 看到建筑的数量。

数据范围 \(1\leq n\leq 10^5\)。

分析

经典的题目,变式。

其实这道题目我看错了两次,第一次看成了最长上升子序列,第二次看成了单调栈,最后才发现这是斜率递增。

这道题目树套树或者是分块都是可以做的。

我们考虑线段树。

由于线段树要合并,那么我们一定要记录的是当前去见斜率最大的是多少,以及答案为多少。

考虑合并两个区间怎么弄?

首先左边的答案肯定是要的,那么就是要找右区间的斜率大于他的答案。

后面那一个不妨放开思路,直接再来一个 query() 函数即可。

斟酌精度啊各位!

代码

时间复杂度 \(\mathcal{O}(n\log^2n)\)

#include <iostream>
#include <cstdio>
#include <cstring>
#include <stdlib.h>
#include <algorithm>
#include <vector>
#include <cmath>
#include <stack>
#define int long long
#define N 100005
#define M 320
using namespace std;
struct node{double k;int len;
}tr[N << 2];
#define ls(x) (x << 1)
#define rs(x) (x << 1 | 1)
int query(int x,int l,int r,double k);
void pushup(int x,int l,int r) {int mid = l + r >> 1;tr[x].k = max(tr[ls(x)].k,tr[rs(x)].k);tr[x].len = tr[ls(x)].len + query(rs(x),mid + 1,r,tr[ls(x)].k);
}
void update(int x,int l,int r,int pos,double k) {if (l == r) {tr[x] = {k,1};return;}int mid = l + r >> 1;if (pos <= mid) update(ls(x),l,mid,pos,k);else update(rs(x),mid + 1,r,pos,k);pushup(x,l,r);
}
int query(int x,int l,int r,double k) {if (tr[x].k <= k) return 0;if (l == r) return tr[x].k > k;int mid = l + r >> 1;if (tr[ls(x)].k <= k) return query(rs(x),mid + 1,r,k);else return query(ls(x),l,mid,k) + tr[x].len - tr[ls(x)].len; 
}
int n,m;
signed main(){cin >> n >> m;for (int i = 1;i <= m;i ++) {int x,y;scanf("%lld%lld",&x,&y);update(1,1,n,x,1.0 * y / x);printf("%lld\n",tr[1].len);}return 0;
}

相关新闻

  • win10安装MongoDB 3.0.15 Community
  • git不小心把本地从未提交过的贮藏的版本删掉了,如何恢复?
  • ffmpeg安装配置

最新新闻

  • Headroom:让 AI Agent「吃得少、营养好」的开源上下文压缩神器
  • 2026昆山屋顶防水市场深度分析与服务商适配推荐:聚焦本地需求的优质选择 专业防水公司排名推荐(2026年6月防水补漏最新TOP权威排名) - 鼎壹万修缮说
  • 2026年卫生间隔断工厂综合盘点:传炼装饰工程成为工装项目首选
  • 如何快速掌握Umi-OCR:面向初学者的免费离线文字识别全攻略
  • VRT:视频复原Transformer——原理深度解析与技术实现
  • 武汉家具安装推荐良匠千艺2026口碑榜 - 我叫一

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号