CF1482E Skyline Photo

news/2025/10/28 16:29:29/文章来源:https://www.cnblogs.com/alexande/p/19172145

绝世唐题,为啥没有人写题解啊。

首先发现划分成若干个段,设一个 DP \(f_i\) 表示以 \(i\) 结尾的分段方式的最大贡献,那么朴素转移就是你去枚举区间取 \(\max\)

发现是求 \(h\) 的最小值所对应的 \(b\),比较典的做法是扔进单调栈里,用一棵线段树维护,每次弹栈就将原本 \(b\) 的贡献删掉,入栈就加上目前 \(b\) 的贡献,由于单调栈的性质保证了每个 \(b\) 都是目前区间中最小的 \(h\) 所对应的。

线段树维护一个单点更改,区间加,区间求 \(\max\) 即可,时间复杂度 \(O(n \log n)\)

code:

#include <bits/stdc++.h>using namespace std;#define int long long
#define fir first
#define sec second
#define mkp make_pair 
#define pb push_back
#define lep( i, l, r ) for ( int i = ( l ); i <= ( r ); ++ i )
#define rep( i, r, l ) for ( int i = ( r ); i >= ( l ); -- i )typedef unsigned long long ull;
typedef long long ll;
typedef long double ld;
typedef pair < int, int > pii;namespace IO{const int SIZE=1<<21;static char ibuf[SIZE],obuf[SIZE],*iS,*iT,*oS=obuf,*oT=oS+SIZE-1;int qr;char qu[55],c;bool f;#define getchar() (IO::iS==IO::iT?(IO::iT=(IO::iS=IO::ibuf)+fread(IO::ibuf,1,IO::SIZE,stdin),(IO::iS==IO::iT?EOF:*IO::iS++)):*IO::iS++)#define putchar(x) *IO::oS++=x,IO::oS==IO::oT?flush():0#define flush() fwrite(IO::obuf,1,IO::oS-IO::obuf,stdout),IO::oS=IO::obuf#define puts(x) IO::Puts(x)template<typename T>inline void read(T&x){for(f=1,c=getchar();c<48||c>57;c=getchar())f^=c=='-';for(x=0;c<=57&&c>=48;c=getchar()) x=(x<<1)+(x<<3)+(c&15); x=f?x:-x;}template<typename T>inline void write(T x){if(!x) putchar(48); if(x<0) putchar('-'),x=-x;while(x) qu[++qr]=x%10^48,x/=10;while(qr) putchar(qu[qr--]);}inline void Puts(const char*s){for(int i=0;s[i];i++)putchar(s[i]);putchar('\n');}struct Flusher_{~Flusher_(){flush();}}io_flusher_;
}
using IO::read;
using IO::write;template < class type > inline void chkmin ( type &x, type y ) { x = ( x <= y ? x : y ); }
template < class type > inline void chkmax ( type &x, type y ) { x = ( x >= y ? x : y ); }const int N = 3e5 + 5;int n;
int h[N], b[N], f[N];int tree[N << 2], tag[N << 2];void pushup ( int node ) {tree[node] = max ( tree[node << 1], tree[node << 1 | 1] );
}void addtag ( int node, int k ) {tree[node] += k;tag[node] += k;
}void pushdown ( int node ) {if ( tag[node] != 0x3f3f3f3f3f3f3f3f ) {addtag ( node << 1, tag[node] ), addtag ( node << 1 | 1, tag[node] );tag[node] = 0x3f3f3f3f3f3f3f3f;}
}void assgin ( int node, int lt, int rt, int x, int k ) {if ( lt == rt ) {tree[node] = k;return ;}pushdown ( node );int mid = lt + rt >> 1;if ( x <= mid ) {assgin ( node << 1, lt, mid, x, k );}else {assgin ( node << 1 | 1, mid + 1, rt, x, k );}pushup ( node );
}void update ( int node, int lt, int rt, int x, int y, int k ) {if ( x <= lt && rt <= y ){addtag ( node, k );return ;}pushdown ( node );int mid = lt + rt >> 1;if ( x <= mid ) {update ( node << 1, lt, mid, x, y, k );}if ( mid + 1 <= y ) {update ( node << 1 | 1, mid + 1, rt, x, y, k );}pushup ( node );
}int query ( int node, int lt, int rt, int x, int y ) {if ( x <= lt && rt <= y ) {return tree[node];}pushdown ( node );int mid = lt + rt >> 1, res = -1e18;if ( x <= mid ) {res = max ( res, query ( node << 1, lt, mid, x, y ) );}if ( mid + 1 <= y ) {res = max ( res, query ( node << 1 | 1, mid + 1, rt, x, y ) );}return res;
}stack < int > stk;void Solve () {ios :: sync_with_stdio ( false );cin.tie ( 0 ), cout.tie ( 0 );memset ( tag, 0x3f, sizeof ( tag ) );memset ( tree, 0xcf, sizeof ( tree ) );cin >> n;for ( int i = 1; i <= n; i ++ ) {cin >> h[i];}for ( int i = 1; i <= n; i ++ ) {cin >> b[i];}memset ( f, 0x3f, sizeof ( f ) );f[0] = 0;assgin ( 1, 1, n, 1, 0 );for ( int i = 1; i <= n; i ++ ) {int lst = i - 1;while ( !stk.empty () && ( h[i] < h[stk.top ()] || h[i] == h[stk.top ()] && b[i] > b[stk.top ()] ) ) {int r = stk.top ();stk.pop ();int l = ( !stk.empty () ? stk.top () + 1 : 1 );update ( 1, 1, n, l, r, -b[r] );}int l = ( !stk.empty () ? stk.top () + 1 : 1 );update ( 1, 1, n, l, i, b[i] );stk.push ( i );f[i] = query ( 1, 1, n, 1, i );assgin ( 1, 1, n, i + 1, f[i] );}cout << f[n];
}signed main () {
#ifdef judgefreopen ( "Code.in", "r", stdin );freopen ( "Code.out", "w", stdout );freopen ( "Code.err", "w", stderr );
#endifSolve ();return 0;
}

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

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

相关文章

sqlserver 添加或修改字段

添加字段ALTER TABLE 表名 ADD 列名 数据类型 [约束];修改字段 ALTER TABLE 表名 ALTER COLUMN 列名 新数据类型;

最小瓶颈生成树

作业是鸽子更新的动力。\(\text{MBST}\)(\(\text{Minimum Bottleneck Spanning Tree}\))指的是求一颗生成树,其中最大的边权最小(所以也叫 \(\text{min-max spanning tree}\))。和最小树形图一样,也有有向图版本…

Linux系统常用操作指令简明指南

Linux系统常用操作指令简明指南 熟练掌握Linux命令是每个开发者的基本功。这份指南凝聚了我多年开发经验中的精华,将帮助您提高工作效率,解决实际问题。请记住,Linux哲学的核心在于"每个工具做好一件事,然后将…

小程序语音通话让智能设备会“说话”

小程序语音通话让智能设备会“说话”在万物互联的智能时代,如何让智能设备与用户建立更自然、更高效的连接,成为产品脱颖而出的关键。传统的APP推送常因步骤繁琐、易被淹没而效率低下,微信小程序语音通话应运而生,…

易基因: NG (IF29):颠覆认知!深圳仙湖植物园刘阳团队WGBS及超级泛基因组分析揭示苔藓植物基因家族比维管植物更丰富|项目文章

大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。 近日,由深圳市中国科学院仙湖植物园董珊珊博士等为第一作者、刘阳研究员等为通讯作者,在国际著名期刊《Nature Genetics》(自然-遗传学)上发表题…

2025年口碑好的工业制冷供应厂家推荐

文章摘要 本文深入解析2025年工业制冷供应厂家的关键选择标准,聚焦阜阳市展翼翔制冷技术有限公司的核心优势,包括设备集成化、高效制冷技术和全生命周期服务。通过技术参数分析和客户案例,帮助用户识别口碑好的供应…

2025 年 150 吨地磅,180 吨地磅,200 吨地磅厂家最新推荐,产能、专利、环保三维数据透视!

引言 在港口运输、矿产开采、重型制造等领域,150 吨、180 吨、200 吨级地磅作为核心称重设备,其精度与稳定性直接关系到企业运营成本与数据可信度。当前市场中部分厂家存在大吨位产品承重性能不足、核心部件耐用性差…

MySql8.0公共表表达式『CTE』

Mysql8.0支持CTE语法,这样就支持递归查询树状结构表功能了,极大方便了树状结构表的处理CTE是『common table expression』的缩写,中文翻译过来就是『公共表表达式』,使用它可以为临时查询结果命名,命名后可以在后…

2025 年进口地磅,出口地磅,100 吨地磅,120 吨地磅厂家最新推荐,产能、专利、环保三维数据透视!

引言 随着全球地磅市场年复合增长率达到 4.2%,100 吨、120 吨等中大型地磅需求持续攀升,进口与出口贸易规模同步扩大,但市场品牌良莠不齐的问题仍未解决。为精准甄选优质厂家,本次测评联合行业权威机构,基于三大核…

精通CTS与低功耗时钟设计

1、CTS在数字化时代的重要性 在数字化时代,IC(集成电路)设计日趋复杂,性能与功耗成为设计中的核心挑战。时钟树合成(CTS,Clock Tree Synthesis)作为物理实现流程中的关键环节,其目标是建立一个时钟分布网络,让…

GISDataMgr(数据管理工具)

瓦片导出工具,按需可以对数据包进行按照区域导出默认按省导出数据:也可以自定义导出区域:

202510月年口碑好的板式家具品牌前十榜单推荐

文章摘要 板式家具行业在2025年持续发展,注重环保、定制化和智能化趋势。本文基于市场调研和用户反馈,整理了板式家具品牌排名前十的列表,供消费者参考。排名综合考虑了品牌实力、产品质量、服务口碑等因素,旨在帮…

2025年板式家具品牌行业趋势与top5排名解析

摘要 板式家具行业在2025年预计将持续增长,受环保政策和消费升级驱动,市场规模有望突破千亿元。消费者对定制化、环保性能的需求日益增强,推动品牌创新。本文基于行业数据和用户评价,整理出top5推荐品牌表单,供采…

2025年10月口碑好的板式家具厂家前十名推荐

文章摘要 板式家具行业在2025年继续蓬勃发展,受益于环保材料创新和个性化定制趋势,市场规模预计年增长率达8-10%。消费者对家具的装饰性、耐用性和环保性要求日益提高,推动厂家不断提升产品质量和服务水平。本排名基…

学习笔记510—怎么去除”想要访问你的钥匙串中的密钥“Adobe Licensing ”若要给予许可

怎么去除”想要访问你的钥匙串中的密钥“Adobe Licensing ”若要给予许可新安装完PS,PR等Adobe软件,打开显示要输入密码,是什么密码??? 钥匙串密码是为了Mac系统为了保障电脑的安全设置的密码,简单的说就…

蓝狐家庭维修小程序系统:一站式家庭维修服务解决方案

一、概述总结 蓝狐家庭维修小程序系统是由小狐狸科技打造的一款专注于家庭维修服务的数字化解决方案,涵盖微信小程序与抖音小程序定制开发服务,同时提供最新版源码下载。该系统以 “便捷高效、功能全面” 为核心,构…

打造智慧体育场馆的“视觉中枢”:国标GB28181算法算力平台EasyGBS助力体育中心实现全域感知与智能升级

打造智慧体育场馆的“视觉中枢”:国标GB28181算法算力平台EasyGBS助力体育中心实现全域感知与智能升级一、方案背景 随着体育事业发展,体育场馆使用愈发频繁、活动规模扩大,安全保障、秩序维护和运营管理压力剧增。…

完整教程:【强化学习】#8 DQN(深度Q学习)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

达梦删除数据文件后恢复

数据库没有关闭 [root@dmc1 arc]# rm -rf /dm/data/dmtj/tbs02.DBF[root@dmc1 arc]# ps -ef|grep dbsroot 248241 45882 0 11:47 pts/3 00:00:00 grep --color=auto dbs[root@dmc1 arc]# ps -ef|grep dmsdm…

贪心训练

AT_agc004_d [AGC004D] Teleporter 每个点只连一条边,