\(\mathcal{Description}\)

  Link.

  给定点集 \(\{P_n\}\),\(P_i=(i,h_i)\),\(m\) 次修改,每次修改某个 \(h_i\),在每次修改后求出 \((0,0)\cup\{P_n\}\) 的下凸壳大小(输出时 \(-1\))。

  \(n,m\le10^5\),\(h_i\ge0\)。

\(\mathcal{Solution}\)

  令 \(k_i=\frac{h_i}{i}\),我们相当于要维护 \(\{k_n\}\) 中从 \(k_1\) 开始的最长贪心上升子序列 (LGIS?)。

  这是一个动态维护 LGIS 的常见 trick:建一棵序列线段树,对于结点 \(u\),维护区间最大值 \(x_u\) 以及以左区间的最大值为起始的,在右区间中的 LGIS 长度(不包括左区间最大值,故实际值为长度 \(-1\))。

  维护过程,需要支持形如“在 \(u\) 区间内,仅考虑不小于 \(x\) 的值,LGIS 长度”的查询,利用已维护信息可以 \(\mathcal O(\log n)\) 树上查询解决,所以每次标记上传是 \(\mathcal O(\log n)\) 的,一次修改即 \(\mathcal O(\log^2 n)\),总复杂度为 \(\mathcal O(m\log^2n)\)。

\(\mathcal{Code}\)

/*+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;
}

Solution -「洛谷 P4198」楼房重建的更多相关文章

  1. Solution -「洛谷 P4372」Out of Sorts P

    \(\mathcal{Description}\)   OurOJ & 洛谷 P4372(几乎一致)   设计一个排序算法,设现在对 \(\{a_n\}\) 中 \([l,r]\) 内的元素排 ...

  2. Note/Solution -「洛谷 P5158」「模板」多项式快速插值

    \(\mathcal{Description}\)   Link.   给定 \(n\) 个点 \((x_i,y_i)\),求一个不超过 \(n-1\) 次的多项式 \(f(x)\),使得 \(f(x ...

  3. Solution -「洛谷 P6577」「模板」二分图最大权完美匹配

    \(\mathcal{Description}\)   Link.   给定二分图 \(G=(V=X\cup Y,E)\),\(|X|=|Y|=n\),边 \((u,v)\in E\) 有权 \(w( ...

  4. Solution -「洛谷 P6021」洪水

    \(\mathcal{Description}\)   Link.   给定一棵 \(n\) 个点的带点权树,删除 \(u\) 点的代价是该点点权 \(a_u\).\(m\) 次操作: 修改单点点权. ...

  5. Solution -「洛谷 P4719」「模板」"动态 DP" & 动态树分治

    \(\mathcal{Description}\)   Link.   给定一棵 \(n\) 个结点的带权树,\(m\) 次单点点权修改,求出每次修改后的带权最大独立集.   \(n,m\le10^5 ...

  6. Solution -「洛谷 P5236」「模板」静态仙人掌

    \(\mathcal{Description}\)   Link.   给定一个 \(n\) 个点 \(m\) 条边的仙人掌,\(q\) 组询问两点最短路.   \(n,q\le10^4\),\(m\ ...

  7. Solution -「洛谷 P4320」道路相遇

    \(\mathcal{Description}\)   Link.   给定一个 \(n\) 个点 \(m\) 条边的连通无向图,并给出 \(q\) 个点对 \((u,v)\),询问 \(u\) 到 ...

  8. Solution -「洛谷 P5827」边双连通图计数

    \(\mathcal{Description}\)   link.   求包含 \(n\) 个点的边双连通图的个数.   \(n\le10^5\). \(\mathcal{Solution}\)    ...

  9. Solution -「洛谷 P5827」点双连通图计数

    \(\mathcal{Description}\)   link.   求有 \(n\) 个结点的点双连通图的个数,对 \(998244353\) 取模.   \(n\le10^5\). \(\mat ...

随机推荐

  1. element ui 动态菜单解决方案集锦

    1.<分享一个VUE Element-UI 的多级菜单动态渲染的组件> 2.<饿了么组件库,element-ui开发精美的后台管理系统系列之(一)开发伸缩菜单> 3.<V ...

  2. redis 主从复制实现

    Redis 主从复制的实现 安装redis 修改redis的配置文件 redis.conf ②开启daemonize yes ③Pid文件名字 ④指定端口 ⑤Log文件名字 ⑥Dump.rdb名字 在 ...

  3. synchronized学习笔记

    概述 我们都知道加锁的目的就是:序列化访问临界资源,即同一时刻只能有一个线程访问临界资源(同步互斥访问).在java对象中,每一个对象有且只有一个同步锁.这也意味着,同步锁依赖于对象而存在,当我们访问 ...

  4. Redis可视化内存分析工具--RDR:查看Redis中key的占用情况

    RDR(redis datareveal)是一个解析redis rdbfile的工具.与redis-rdb-tools 相比,RDR 是由 golang 实现的,速度要快得多(5GB rdbfile ...

  5. Keil MDK STM32系列(四) 基于抽象外设库HAL的STM32F401开发

    Keil MDK STM32系列 Keil MDK STM32系列(一) 基于标准外设库SPL的STM32F103开发 Keil MDK STM32系列(二) 基于标准外设库SPL的STM32F401 ...

  6. Solon 1.6.15 发布,增加部分jdk17特性支持

    关于官网 千呼万唤始出来: https://solon.noear.org .整了一个月多了...还得不断接着整! 关于 Solon Solon 是一个轻量级应用开发框架.支持 Web.Data.Jo ...

  7. 【解决了一个小问题】如何展示VictoriaMetrics组件上报的bucket数据

    VM体系还真的是不一(he)样(qun), 它上报的监控数据长这样: vmagent_remotewrite_block_size_rows_bucket{vmrange="2.448e+0 ...

  8. 不难懂——th: 的常用标签

    关键字>       功能介绍    >      案例 th:id 替换id <input th:id="'xxx' + ${collect.id}"/> ...

  9. Android开发----Button组件的使用与练习

    Button 学习目标: 文字大小.颜色 自定义背景形状 自定义按压效果 点击事件 创建一个新的Activity以增加控件 1.文字大小.颜色 直接在xml文件中定义即可 <Button and ...

  10. nginx模块lnmp架构

    目录 一:关于lnmp架构 二:目录索引模块 1.目录索引模块内容 1.开启目录索引(创建模块文件) 2.测试 3.重启nginx 4.配置域名解析DNS 5.网址测试 二:目录索引(格式化文件大小) ...