G - Merchant Takahashi / F - Useless for LIS

G - Merchant Takahashi

首先考虑暴力 DP。

设最后一步走到编号 ii 的城镇的方案的最大收益为 fifi​,则每次集市相当于是 fTi←fj−C∣Ti−j∣+Pi(1≤j≤n)。

这样每次可以通过枚举 j 来转移,这样总时间复杂度是 O(nm) 的,无法通过。

考虑优化 DP,先拆绝对值,把转移分为以下两类:

  • fTi​​←fj​−C(Ti​−j)+Pi​(1≤j≤Ti​),即 fTi​​←(fj​+C⋅j)+(−C⋅Ti​+Pi​)。

    注意到后面部分是定值而前面部分与 i 无关,j 的取值范围又是一段前缀,所以我们用树状数组维护 fj​+C⋅j 的前缀最大值。

  • ffTi​​←fj​−C(j−Ti​)+Pi​(Ti​≤j≤n),即 fTi​​←(fj​−C⋅j)+(C⋅Ti​+Pi​)。

    同理我们用树状数组维护 fj​−C⋅j 的后缀最大值。怎样用树状数组维护后缀信息?只需交换两个循环循序即可。

然后我们把 fTi​​ 插入到树状数组的Ti​ 位置去。

初始状态为 f1​=0,最后答案为 最大的f i。注意代码中的 fifi​ 表示的是上文的 fTi.

代码:

#include <bits/stdc++.h>
#define int long long
#define fi first
#define se second
#define all(v) v.begin(),v.end()
using namespace std;
const int inf = 0x3f3f3f3f3f3f3f;
const int N = 2e5+5;
int n,m,c;
int dp[N];
int v[N],w[N];
int tr1[N];//求小于等于x的最大值
int tr2[N];//求大于等于x的最大值int lowbit(int x){return x&(-x);
}void add1(int x,int c){for(int i=x;i<=n;i+=lowbit(i)){tr1[i] = max(tr1[i],c);}return;
}int ask1(int x){int res = -inf;for(int i=x;i>=1;i-=lowbit(i)){res = max(res,tr1[i]);}return res;
}void add2(int x,int c){for(int i=x;i>=1;i-=lowbit(i)){tr2[i] = max(tr2[i],c);}   return;
}int ask2(int x){int res = -inf;for(int i=x;i<=n;i+=lowbit(i)){res = max(res,tr2[i]);}return res;
}void solve(){cin>>n>>c;cin>>m;memset(tr1,-0x3f3f3f,sizeof(tr1));memset(tr2,-0x3f3f3f,sizeof(tr2));add1(1,c);add2(1,-c);dp[0] = 0;int ans = 0;for(int i=1;i<=m;i++){int x,y;cin>>x>>y;int t = ask1(x) + (y-c*x);int tt = ask2(x) + (y+c*x);dp[i] = max(t,tt);ans = max(ans,dp[i]);add1(x,dp[i]+c*x);add2(x,dp[i]-c*x);}cout<<ans<<"\n";}signed main(){int T=1;//cin>>T;while(T--){solve();}return 0;
}

F - Useless for LIS

双倍经验:

算法依旧是树状数组加dp,f [ i ]表示前缀的最大长度,g [ i ] 表示后缀的最大长度,那么 i 的最大长度为 f [ i ] + g [ i ] - 1(减去重复元素)

 代码:

#include <bits/stdc++.h>
#define int long long
#define fi first
#define se second
#define all(v) v.begin(),v.end()
using namespace std;
const int inf = 0x3f3f3f3f3f3f3f;
const int N = 2e5+5;
int n;
int a[N];
int f[N],g[N];
int tr1[N],tr2[N];
map<int,int>mp;int lowbit(int x){return x&(-x);
}void add1(int x,int c){//加到前面for(int i=x;i<=n;i+=lowbit(i)){tr1[i] = max(tr1[i],c);}return;
}int ask1(int x){int res = 0;for(int i=x;i>=1;i-=lowbit(i)){res = max(res,tr1[i]);}return res;
}void add2(int x,int c){//加到后面for(int i=x;i>=1;i-=lowbit(i)){tr2[i] = max(tr2[i],c);}return;
}int ask2(int x){int res = 0;for(int i=x;i<=n;i+=lowbit(i)){res = max(res,tr2[i]);}return res;
}void solve(){cin>>n;mp.clear();for(int i=0;i<=n+1;i++)f[i] = g[i] = 0;for(int i=0;i<=n+1;i++){tr1[i] = tr2[i] = 0;}for(int i=1;i<=n;i++)cin>>a[i];vector<int>b;//离散化for(int i=1;i<=n;i++){if(mp[a[i]])continue;mp[a[i]] = 1;b.push_back(a[i]);}sort(all(b));for(int i=1;i<=n;i++){int t = lower_bound(all(b),a[i]) - b.begin();a[i] = t+1;}int len = 0;//求前缀for(int i=1;i<=n;i++){f[i] = ask1(a[i]-1) + 1;add1(a[i],f[i]);len = max(len,f[i]);}/*for(int i=1;i<=n;i++){for(int j=i-1;j>=1;j--){if(a[i]>a[j]){f[i] = max(f[i],f[j]+1);len = max(len,f[i]);}}}*/for(int i=n;i>=1;i--){//求后缀g[i] = ask2(a[i]+1) + 1;add2(a[i],g[i]);}vector<int>ans;for(int i=1;i<=n;i++){if(f[i]+g[i]-1 == len){//如果前面的长度加上后面的长度为最长,那么就选ans.push_back(i);}}cout<<ans.size()<<"\n";for(int i=0;i<ans.size();i++){cout<<ans[i]<<" ";}cout<<"\n";}signed main(){int T=1;cin>>T;while(T--){solve();}return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode_sql_day28(1767.寻找没有被执行的任务对)

描述&#xff1a;1767.寻找没有被执行的任务对 表&#xff1a;Tasks ------------------------- | Column Name | Type | ------------------------- | task_id | int | | subtasks_count | int | ------------------------- task_id 具有唯一值的列。 ta…

无人机企业合法运营必备运营合格证详解

无人机企业运营合格证&#xff0c;是由国家相关航空管理部门&#xff08;如中国民用航空局或其授权机构&#xff09;颁发的&#xff0c;用于确认无人机企业具备合法、安全、高效运营无人机能力的资质证书。该证书是无人机企业开展商业运营活动的必要条件&#xff0c;标志着企业…

原生+jquery写自动消失的提示框

<!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>自动消失消息提示</title> <style>/…

信息安全数学基础(9)素数的算数基本定理

前言 在信息安全数学基础中&#xff0c;素数的算数基本定理&#xff08;也称为唯一分解定理或算术基本定理&#xff09;是一个极其重要的定理&#xff0c;它描述了正整数如何唯一地分解为素数的乘积。这个定理不仅是数论的基础&#xff0c;也是许多密码学算法&#xff08;如RSA…

同为TVT设备主动注册协议接入SVMSPro平台

同为设备主动注册协议接入SVMSPro平台 步骤一&#xff1a;进设备网页或者NVR配置界面&#xff0c;进功能面板&#xff0c;网络&#xff0c;平台接入 接入类型&#xff1a;平台软件&#xff0c;勾选启用主动上报 服务器地址&#xff1a;平台服务IP 端口&#xff1a;12009 ID&…

高级算法设计与分析 学习笔记6 B树

B树定义 一个块里面存了1000个数和1001个指针&#xff0c;指针指向的那个块里面的数据大小介于指针旁边的两个数之间 标准定义&#xff1a; B树上的操作 查找B树 创建B树 分割节点 都是选择正中间的那个&#xff0c;以免一直分裂。 插入数字 在插入的路上就会检查节点需不需要…

RabbitMQ 高级特性——持久化

文章目录 前言持久化交换机持久化队列持久化消息持久化 前言 前面我们学习了 RabbitMQ 的高级特性——消息确认&#xff0c;消息确认可以保证消息传输过程的稳定性&#xff0c;但是在保证了消息传输过程的稳定性之后&#xff0c;还存在着其他的问题&#xff0c;我们都知道消息…

Delphi5利用DLL实现窗体的重用

文章目录 效果图参考利用DLL实现窗体的重用步骤1 设计出理想窗体步骤2 编写一个用户输出的函数或过程&#xff0c;在其中对窗体进行创建使它实例化步骤3 对工程文件进行相应的修改以适应DLL格式的需要步骤4 编译工程文件生成DLL文件步骤5 在需要该窗体的其他应用程序中重用该窗…

不会JS逆向也能高效结合Scrapy与Selenium实现爬虫抓取

1. 创建基础的scrapy项目 1.1 基础项目 在pycharm中安装scrapy框架 pip install scrapy 创建项目 scrapy startproject 项目名称 我们现在可以看到整体文件的目录&#xff1a; firstBlood ├── firstBlood # 项目跟目录 │ ├── init.py │ ├── items.py # 封装数…

【网络】高级IO——select版本TCP服务器

目录 前言 一&#xff0c;select函数 1.1.参数一&#xff1a;nfds 1.2.参数二&#xff1a; readfds, writefds, exceptfds 1.2.1.fd_set类型和相关操作宏 1.2.2.readfds, writefds, exceptfds 1.2.3.怎么理解 readfds, writefds, exceptfds是输入输出型参数 1.3.参数三…

数据结构之二叉树遍历

二叉树的遍历 先序遍历 先输入父节点&#xff0c;再遍历左子树和右子树&#xff1a;A、B、D、E、C、F、G 中序遍历 先遍历左子树&#xff0c;再输出父节点&#xff0c;再遍历右子树&#xff1a;D、B、E、A、F、C、G 后序遍历 先遍历左子树&#xff0c;再遍历右子树&#xff0c;…

SpringBoot设置mysql的ssl连接

因工作需要&#xff0c;mysql连接需要开启ssl认证&#xff0c;本文主要讲述客户端如何配置ssl连接。 开发环境信息&#xff1a; SpringBoot&#xff1a; 2.0.5.RELEASE mysql-connector-java&#xff1a; 8.0.18 mysql version&#xff1a;8.0.18 一、检查服务端是否开启ssl认…

微信公众号开发入门

微信公众号开发是指开发者基于微信公众平台&#xff08;WeChat Official Accounts Platform&#xff09;所提供的接口与功能&#xff0c;开发和构建自定义的功能与服务&#xff0c;以满足企业、组织或个人在微信生态中的应用需求。微信公众号开发主要围绕公众号消息处理、菜单管…

K1计划100%收购 MariaDB; TDSQL成为腾讯云核心战略产品; Oracle@AWS/Google/Azure发布

重要更新 1. 腾讯全球数字生态大会与9月5日-6日举行&#xff0c;发布“5T”战略&#xff0c;包括TDSQL、TencentOS、TCE&#xff08;专有云 &#xff09;、TBDS&#xff08;大数据&#xff09;、TI &#xff08;人工智能开发平台&#xff09;等 ( [2] ) ; 并正式向原子开源基金…

初始分布式系统和Redis特点(

&#xff08;一&#xff09;认识redis Redis是一个开源&#xff08;BSD许可&#xff09;&#xff0c;内存存储的数据结构服务器&#xff0c;可用作数据库&#xff0c;高速缓存和消息队列代理。它支持字符串、哈希表、列表、集合、有序集合&#xff0c;位图&#xff0c;hyperlog…

后台数据管理系统 - 项目架构设计-Vue3+axios+Element-plus(0920)

十三、文章分类页面 - [element-plus 表格] Git仓库&#xff1a;https://gitee.com/msyycn/vue3-hei-ma.git 基本架子 - PageContainer 功能需求说明&#xff1a; 基本架子-PageContainer封装文章分类渲染 & loading处理文章分类添加编辑[element-plus弹层]文章分类删除…

[Python]案例驱动最佳入门:Python数据可视化在气候研究中的应用

在全球气候问题日益受到关注的今天&#xff0c;气温变化成为了科学家、政府、公众讨论的热门话题。然而&#xff0c;全球气温究竟是如何变化的&#xff1f;我们能通过数据洞察到哪些趋势&#xff1f;本文将通过真实模拟的气温数据&#xff0c;结合Python数据分析和可视化技术&a…

Flutter启动无法运行热重载

当出现这种报错时&#xff0c;大概率是flutter的NO_Proxy出问题。 请忽略上面的Android报错因为我做的是windows开发这个也就不管了哈&#xff0c;解决下面也有解决报错的命令大家执行一下就行。 着重说一下Proxy的问题&#xff0c; 我们看到提示NO_PROXY 没有设置。 这个时候我…

基于YOLOv8+LSTM的商超扶梯场景下行人安全行为姿态检测识别

基于YOLOv8LSTM的商超扶梯场景下行人安全行为姿态检测识别 手扶电梯 行为识别 可检测有人正常行走&#xff0c;有人 跌倒&#xff0c;有人逆行三种行为 跌倒检测 电梯跌倒 扶梯跌倒 人体行为检测 YOLOv8LSTM。 基于YOLOv8LSTM的商超扶梯场景下行人安全行为姿态检测识别&#xf…

Vue3.0组合式API:使用ref获取DOM元素

Vue3.0组合式API系列文章&#xff1a; 《Vue3.0组合式API&#xff1a;setup()函数》 《Vue3.0组合式API&#xff1a;使用reactive()、ref()创建响应式代理对象》 《Vue3.0组合式API&#xff1a;computed计算属性、watch监听器、watchEffect高级监听器》 《Vue3.0组合式API&…