Solution -「洛谷 P4198」楼房重建
\(\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」楼房重建的更多相关文章
- Solution -「洛谷 P4372」Out of Sorts P
\(\mathcal{Description}\) OurOJ & 洛谷 P4372(几乎一致) 设计一个排序算法,设现在对 \(\{a_n\}\) 中 \([l,r]\) 内的元素排 ...
- Note/Solution -「洛谷 P5158」「模板」多项式快速插值
\(\mathcal{Description}\) Link. 给定 \(n\) 个点 \((x_i,y_i)\),求一个不超过 \(n-1\) 次的多项式 \(f(x)\),使得 \(f(x ...
- Solution -「洛谷 P6577」「模板」二分图最大权完美匹配
\(\mathcal{Description}\) Link. 给定二分图 \(G=(V=X\cup Y,E)\),\(|X|=|Y|=n\),边 \((u,v)\in E\) 有权 \(w( ...
- Solution -「洛谷 P6021」洪水
\(\mathcal{Description}\) Link. 给定一棵 \(n\) 个点的带点权树,删除 \(u\) 点的代价是该点点权 \(a_u\).\(m\) 次操作: 修改单点点权. ...
- Solution -「洛谷 P4719」「模板」"动态 DP" & 动态树分治
\(\mathcal{Description}\) Link. 给定一棵 \(n\) 个结点的带权树,\(m\) 次单点点权修改,求出每次修改后的带权最大独立集. \(n,m\le10^5 ...
- Solution -「洛谷 P5236」「模板」静态仙人掌
\(\mathcal{Description}\) Link. 给定一个 \(n\) 个点 \(m\) 条边的仙人掌,\(q\) 组询问两点最短路. \(n,q\le10^4\),\(m\ ...
- Solution -「洛谷 P4320」道路相遇
\(\mathcal{Description}\) Link. 给定一个 \(n\) 个点 \(m\) 条边的连通无向图,并给出 \(q\) 个点对 \((u,v)\),询问 \(u\) 到 ...
- Solution -「洛谷 P5827」边双连通图计数
\(\mathcal{Description}\) link. 求包含 \(n\) 个点的边双连通图的个数. \(n\le10^5\). \(\mathcal{Solution}\) ...
- Solution -「洛谷 P5827」点双连通图计数
\(\mathcal{Description}\) link. 求有 \(n\) 个结点的点双连通图的个数,对 \(998244353\) 取模. \(n\le10^5\). \(\mat ...
随机推荐
- Echart可视化学习(六)
文档的源代码地址,需要的下载就可以了(访问密码:7567) https://url56.ctfile.com/f/34653256-527823386-04154f 柱状图定制 官网找到类似实例, 适 ...
- VsCode安装与配置
一.安装 二.配置 开启emmet完整的语法 文件-首选项-设置:Emmet: Trigger Expansion On Tab 三.常用插件 必装: Chinese (Simplified) Lan ...
- javaScript(笔记1)
一.JavaScript数据类型: 1.分类: 基本数据类型 & 高级引用数据类型 2.基本数据类型: 数字类型(number), 字符串类型(string), 布尔类型(boolean) 3 ...
- 手把手教你分析解决MySQL死锁问题
在生产环境中如果出现MySQL死锁问题该如何排查和解决呢,本文将模拟真实死锁场景进行排查,最后总结下实际开发中如何尽量避免死锁发生. 一.准备好相关数据和环境 当前自己的数据版本是8.0.22 mys ...
- 基于Node和Electron开发了轻量版API接口请求调试工具——Post-Tool
Electron 是一个使用 JavaScript.HTML 和 CSS 构建桌面应用程序的框架. 嵌入 Chromium 和 Node.js 到 二进制的 Electron 允许您保持一个 Java ...
- zookeeper,kafka,redis等分布式框架的主从同步策略
1 zookeeper选主机制 1.1 LeaderElection选举算法 选举线程由当前Server发起选举的线程担任,他主要的功能对投票结果进行统计,并选出推荐的Server.选举线程首先向所有 ...
- gin框架中请求参数的绑定与多数据格式处理
package main import ( "fmt" "github.com/gin-gonic/gin" ) // gin框架提供给开发者表单实体绑定的功能 ...
- gorm链接mysql的初始化配置和连接池的使用
1. mysql的初始化配置 dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?%s", user, passwd, host, port, db, ...
- 前端页面禁止调试debugger方法汇总
打开控制台直接跳转页面 //debug调试时跳转页面 var element = new Image(); Object.defineProperty(element,'id',{get:functi ...
- 使用ansible 批量分发ssh密钥
先看执行结果 看看ssh.yml怎么写的 看看hosts文件中backup组怎么写的