[ARC159D] LIS 2 题解

[ARC159D] LIS 2

题面:

题面翻译

给定 n n n 个操作,每次操作给出 l , r l,r l,r,并在 a a a 序列里依次添加 i ∈ [ l , r ] i\in[l,r] i[l,r]

求最后 a a a 的最长上升子序列。

题目描述

数列 $ X $ があります。初め、$ X $ は空です。
高橋君は $ i=1,2,\ldots,N $ の順に次の操作をしました。

  • $ X $ の末尾に $ l_i,l_i+1,\ldots,r_i $ をこの順番で追加する。

操作後の $ X $ の狭義単調増加部分列の長さの最大値を求めてください。

输入格式

入力は以下の形式で標準入力から与えられる。

$ N $ $ l_1 $ $ r_1 $ $ \vdots $ $ l_{N} $ $ r_{N} $

输出格式

答えを出力せよ。

样例 #1
样例输入 #1
4
1 1
2 4
10 11
7 10
样例输出 #1
8
样例 #2
样例输入 #2
4
1 1
1 1
1 1
1 1
样例输出 #2
1
样例 #3
样例输入 #3
1
1 1000000000
样例输出 #3
1000000000
提示
制約
  • $ 1\ \leq\ N\ \leq\ 2\ \times\ 10^5 $
  • $ 1\ \leq\ l_i\ \leq\ r_i\ \leq\ 10^9 $
  • 入力はすべて整数
Sample Explanation 1

操作後の $ X $ は $ (1,2,3,4,10,11,7,8,9,10) $ です。 この数列の $ 1,2,3,4,7,8,9,10 $ 項目からなる部分列は狭義単調増加であり、かつこれが長>さが最大のものです。

Sample Explanation 2

操作後の $ X $ は $ (1,1,1,1) $ です。

线段树优化 d p dp dp 入门。

我们来具象化这个求得最长上升子序列的过程:

首先,我们都会基础最长上升子序列的 d p dp dp: f i = max ⁡ j = 1 i − 1 f j − 1 + 1 f_i = \max\limits_{j = 1}^{i - 1}{f_{j - 1}} + 1 fi=j=1maxi1fj1+1

换成一段一段的区间就长成这样:

img

很好发现: f i = max ⁡ r j < r i f j + r i − r j f_{i} = \max\limits_{r_j < r_i}{f_j + r_i - r_j} fi=rj<rimaxfj+rirj

我们可以把答案存在区间右端点上,然后用动态开点线段树求前缀最大值,就可以转移了。

AC-code:

#include<bits/stdc++.h>
using namespace std;
#define int long long
int rd() {
	int x = 0, w = 1;
	char ch = 0;
	while (ch < '0' || ch > '9') {
		if (ch == '-') w = -1;
		ch = getchar();
	}
	while (ch >= '0' && ch <= '9') {
		x = x * 10 + (ch - '0');
		ch = getchar();
	}
	return x * w;
}
void wt(int x) {
	static int sta[35];
	int f = 1;
	if(x < 0) f = -1,x *= f;
	int top = 0;
	do {
		sta[top++] = x % 10, x /= 10;
	} while (x);
	if(f == -1) putchar('-');
	while (top) putchar(sta[--top] + 48);
}
const int N = 2e5+5;
const int inf = 0x3f3f3f3f3f3f3f3fLL;
int n,f[N],rt[2];
struct sgt{
#define mid ((pl + pr) >> 1)
int mx[N * 50],cnt,ls[N * 50],rs[N * 50];
sgt(){memset(mx,0xcf,sizeof(mx));}
void push_up(int p) {
	mx[p] = max(mx[ls[p]],mx[rs[p]]);
}

void update(int &p,int pl,int pr,int k,int d) {
	if(!p) p = ++cnt;
	if(pl == pr) {mx[p] = max(mx[p],d);return;}
	if(k <= mid) update(ls[p],pl,mid,k,d);
	else update(rs[p],mid+1,pr,k,d);
	push_up(p);
}

int query(int p,int pl,int pr,int l,int r) {
	if(!p) return -inf;
	if(l <= pl && pr <= r) return mx[p];
	if(r <= mid) return query(ls[p],pl,mid,l,r);
	else if(l > mid) return query(rs[p],mid+1,pr,l,r);
	else return max(query(ls[p],pl,mid,l,r),query(rs[p],mid+1,pr,l,r));
}

};

sgt T[2];
signed main() {
	n = rd();int ans = 0;
	T[0].update(rt[0],0,1e9,0,0);
	T[1].update(rt[1],0,1e9,0,0);
	for(int i = 1;i<=n;i++) {
		int l = rd(),r = rd();
		f[i] = max(T[0].query(rt[0],0,1e9,l,r) + r,T[1].query(rt[1],0,1e9,0,l - 1) + r - l + 1);
		T[0].update(rt[0],0,1e9,r,f[i] - r);
		T[1].update(rt[1],0,1e9,r,f[i]);
        ans = max(ans,f[i]);
	}
	wt(ans);
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/900824.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

网络搜索引擎Shodan(1)

声明&#xff1a;学习视频来自b站up主 泷羽sec&#xff0c;如涉及侵权马上删除文章 感谢泷羽sec 团队的教学 视频地址&#xff1a;shodan(1)_哔哩哔哩_bilibili 本文主要讲解网络搜索引擎Shodan的一些用法&#xff08;host和search这两个命令&#xff09;。 Shodan 是一个网络…

Matlab学习02-matlab中的数据显示格式及符号变量

目录 一&#xff0c;关系运算和逻辑运算 二&#xff0c;变量 三&#xff0c;数据显示格式 四&#xff0c;符号运算 1&#xff0c;创建符号变量 2&#xff0c;数值矩阵转换成符号矩阵 一&#xff0c;关系运算和逻辑运算 在matlab中&#xff0c;只要数值不是 &#xff0…

jenkins下拉参数联动

需要安装Active Choices插件&#xff0c;官网地址&#xff1a; https://plugins.jenkins.io/uno-choice/ 安装完插件以后会出现Active Choices选项&#xff1a; 第一个参数&#xff1a; return ["dubbo-op-all-deployment1", "dubbo-op-all-deployment2",…

合并数组的两种常用方法比较

在 JavaScript 中&#xff0c;合并数组的两种常用方法是使用扩展运算符 (...) 和使用 push 方法。 使用扩展运算符 this.items [...this.items, ...data.items]; 优点&#xff1a; 易于理解&#xff1a;使用扩展运算符的语法非常直观&#xff0c;表达了“将两个数组合并成一个…

基于vue框架的的高校消防设施管理系统06y99(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;设备分类,设备信息,维修人员,报修信息,维修进度,院系,消防知识,培训记录,培训信息,备件信息,备件申请,派发信息,采购信息 开题报告内容 基于Vue框架的高校消防设施管理系统开题报告 一、项目背景与意义 随着高校规模的不断扩大和校园建…

基于Django+Python的房屋信息可视化及价格预测系统设计与实现(带文档)

项目运行 需要先安装Python的相关依赖&#xff1a;pymysql&#xff0c;Django3.2.8&#xff0c;pillow 使用pip install 安装 第一步&#xff1a;创建数据库 第二步&#xff1a;执行SQL语句&#xff0c;.sql文件&#xff0c;运行该文件中的SQL语句 第三步&#xff1a;修改源…

无人机喊话器详解!

喊话器材料 外壳常采用尼龙纤维增强材料&#xff0c;这种材料具有抗摔、抗震、轻便、灵活、质量稳定、操作简单等优点&#xff0c;能够满足不同场景的需求。 喊话范围 无人机喊话器的喊话范围主要取决于设备的型号、环境条件以及喊话器的性能参数。一般来说&#xff0c;无人…

【334】基于springboot的仓库管理系统

本科毕业设计论文 题目&#xff1a;仓库管理系统设计与实现 摘 要 信息内容数据从传统到当今&#xff0c;一直在改变&#xff0c;忽然互联网技术让传统信息内容管理见到划时代的黎明&#xff0c;由于传统信息内容管理从时效性、安全系数、可执行性等多个方面&#xff0c;碰到…

rsync算法原理

1. 简介 rsync是一种文件同步的工具&#xff0c;也是一种算法。 2. 算法原理 背景&#xff1a;计算机 α \alpha α 上有文件 a, 计算机 β \beta β上有文件b。要对这两个文件进行同步。 β \beta β将文件b分成大小为S字节的若干块&#xff0c;最后一份可能不足S字节对于b…

中小企业设备维护新策略:Spring Boot系统设计与实现

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

安灯系统助力汽车零部件工厂快速解决生产异常

在汽车零部件制造领域&#xff0c;高效的生产管理和快速解决异常情况是确保产品质量和生产进度的关键。而安灯系统的应用&#xff0c;正为汽车零部件工厂带来了全新的变革&#xff0c;助力其快速解决生产异常。 汽车零部件工厂的生产报工产线看板直观地反映出生产的各项关键数据…

Redis的RDB执行原理

引入‘页表’的概念 Linux里面每个进程都是无法直接操作物理内存的&#xff0c;每个进程只能用页表映射本进程的虚拟内存到物理内存的映射。 bgsave的时候&#xff0c;主进程会fork&#xff08;复制&#xff09;一个子进程&#xff0c;然后该过程仅仅复制了页表。复制页表的过程…

使用 ASP.NET Core 8.0 创建最小 API

构建最小 API&#xff0c;以创建具有最小依赖项的 HTTP API。 它们非常适合需要在 ASP.NET Core 中仅包括最少文件、功能和依赖项的微服务和应用。 本教程介绍使用 ASP.NET Core 生成最小 API 的基础知识。 在 ASP.NET Core 中创建 API 的另一种方法是使用控制器。 有关在最小 …

使用 pydub 的 AudioSegment 获取音频时长 - python 实现

通过使用 pydub 的 AudioSegment 获取音频时长&#xff0c;音频常用格式如 m4a,wav等。 安装 python 库&#xff1a; pip install pydub 获取 m4a 格式的音频时长代码如下&#xff0c;代码如下&#xff1a; #-*-coding:utf-8-*- # date:2024-10 # Author: DataBall - XIAN #…

【云效】阿里云云效:一站式DevOps平台介绍与使用教程(图文)附PPT

【云效】阿里云云效:一站式DevOps平台介绍与使用教程(图文) 云效费用企业管理项目协作代码管理自动流水线测试管理扩展资料附:PPT版文件下载参考资料: https://devops.aliyun.com/ 云效 阿里云一站式DevOps(持续交付)平台,项目数字化协作能效工具。 官方介绍: 云效,一…

bindService 流程学习总结

Context.bindServiceContextImpl.bindServiceCommonActivityManagerService.bindIsolatedService ActiveServices.bindIsolatedServiceretrieveServiceLocked 获取服务信息&#xff1b;bringUpServiceLocked 拉起服务startProcessLocked创建进程 (进程不存在时)realStartServi…

【Android】MVP架构

MVP架构简介 MVP&#xff08;Model-View-Presenter&#xff09;是一种常见的软件架构模式&#xff0c;尤其在Android应用开发中被广泛使用。它将应用程序分为三层&#xff1a;Model、View 和 Presenter&#xff0c;以实现职责分离&#xff0c;提高代码的可维护性和可测试性。 …

ant design vue树选择器实现部分层级禁用(指定层级或依据字段判断)

1、依据字段判断是否禁用 const handData (array, level?) > {array.forEach((item) > {if (level 0) {//获取一级菜单item.title item.levelName;item.value item.code;if (item.type LAYER) {item.disabled true;} else if (item.type JOB) {item.disabled f…

分享几个办公类常用的AI工具

办公类 WPS AI讯飞智文iSlideProcessOn亿图脑图ChatPPT WPS AI 金山办公推出的协同办公 AI 应用&#xff0c;具有文本生成、多轮对话、润色改写等多种功能&#xff0c;可以辅助用户进行文档编辑、表格处理、演示文稿制作等办公操作。 https://ai.wps.cn/ 讯飞智文 科大讯飞推…

OceanBase 首席科学家阳振坤:大模型时代的数据库思考

2024年 OceanBase 年度大会 即将于10月23日&#xff0c;在北京举行。 欢迎到现场了解更多“SQL AI ” 的探讨与分享&#xff01; 近期&#xff0c;2024年金融业数据库技术大会在北京圆满举行&#xff0c;聚焦“大模型时代下数据库的创新发展”议题&#xff0c;汇聚了国内外众多…