Solution -「洛谷 P4198」楼房重建
Link.
给定点集 ,, 次修改,每次修改某个 ,在每次修改后求出 的下凸壳大小(输出时 )。
,。
令 ,我们相当于要维护 中从 开始的最长贪心上升子序列 (LGIS?)。
这是一个动态维护 LGIS 的常见 trick:建一棵序列线段树,对于结点 ,维护区间最大值 以及以左区间的最大值为起始的,在右区间中的 LGIS 长度(不包括左区间最大值,故实际值为长度 )。
维护过程,需要支持形如“在 区间内,仅考虑不小于 的值,LGIS 长度”的查询,利用已维护信息可以 树上查询解决,所以每次标记上传是 的,一次修改即 ,总复杂度为 。
/*+Rainybunny+*/
#include <bits/stdc++.h>
#define rep(i, l, r) for (int i = l, rep##i = r; i <= rep##i; ++i)
#define per(i, r, l) for (int i = r, per##i = l; i >= per##i; --i)
const int MAXN = 1e5;
const double EPS = 1e-7;
int n, m, val[MAXN + 5];
inline double dabs(const double u) { return u < 0 ? -u : u; }
inline double dmax(const double u, const double v) { return u < v ? v : u; }
inline int dcmp(const double u) { return dabs(u) < EPS ? 0 : u < 0 ? -1 : 1; }
#define DR const int u, const int l, const int r
#define SR 1, 1, n
struct SegmentTree {
double mx[MAXN << 2];
int lgis[MAXN << 2];
inline int calc(DR, const double x) {
if (l == r) return dcmp(val[l] - x * l) == 1;
int mid = l + r >> 1;
if (~dcmp(mx[u << 1] - x)) return calc(u << 1, l, mid, x) + lgis[u];
return calc(u << 1 | 1, mid + 1, r, x);
}
inline void pushup(DR) {
mx[u] = dmax(mx[u << 1], mx[u << 1 | 1]);
if (l != r) lgis[u] = calc(u << 1 | 1, l + r + 2 >> 1, r, mx[u << 1]);
}
inline void modify(DR, const int x, const int v) {
if (l == r) return val[l] = v, mx[u] = 1. * val[l] / l, void();
int mid = l + r >> 1;
if (x <= mid) modify(u << 1, l, mid, x, v);
else modify(u << 1 | 1, mid + 1, r, x, v);
pushup(u, l, r);
}
} sgt;
int main() {
std::ios::sync_with_stdio(false), std::cin.tie(0);
std::cin >> n >> m;
rep (i, 1, m) {
int x, y; std::cin >> x >> y;
sgt.modify(SR, x, y), std::cout << sgt.calc(SR, 0.) << '\n';
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
2020-11-15 Solution -「Tenka1 2019 D」Three Colors
2020-11-15 Solution -「ExaWizards 2019 C」Snuke and Wizards
2020-11-15 Solution -「ARC 082D」Sandglass