P4655-[CEOI2017]Building Bridges【斜率优化dp,CDQ分治】

正题

题目链接:https://www.luogu.com.cn/problem/P4655


题目大意

nnn座桥,删除第iii座会产生wiw_iwi的代价,相邻的两座桥i,ji,ji,j会产生(hi−hj)2(h_i-h_j)^2(hihj)2的代价,要求代价最小。


解题思路

fif_ifi表示留到第iii座桥的答案,si=∑j=1iwis_i=\sum_{j=1}^iw_isi=j=1iwi,那么有fi=fj+si−1−sj+(hi−hj)2f_i=f_j+s_{i-1}-s_j+(h_i-h_j)^2fi=fj+si1sj+(hihj)2
fi=si−1+hi2+fj−sj+hj2−2hihjf_i=s_{i-1}+h_i^2+f_j-s_j+h_j^2-2h_ih_jfi=si1+hi2+fjsj+hj22hihj
其实就是要求最小化fj−sj+hj2−2hihjf_j-s_j+h_j^2-2h_ih_jfjsj+hj22hihj
Si=fi−si+hi2S_i=f_i-s_i+h_i^2Si=fisi+hi2
那么就有fi−si−1−hi2=Sj−2hihjf_i-s_{i-1}-h_i^2=S_j-2h_ih_jfisi1hi2=Sj2hihj

然后上CDQCDQCDQ斜率优化就好了,大体是左边排序后处理出左边的凸壳然后考虑它对右边的贡献即可,注意对于hjh_jhj相等的我们取SjS_jSj小的点。

时间复杂度O(nlog⁡2n)O(n\log^2 n)O(nlog2n)(同理用归并排序可以做到O(nlog⁡n)O(n\log n)O(nlogn)


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=1e5+10;
ll n,p[N],s[N],f[N],S[N],h[N],st[N],q[N]; 
bool cmp(ll a,ll b){return h[a]>h[b];}
bool cMp(ll a,ll b){return (h[a]==h[b])?(S[a]<S[b]):(h[a]<h[b]);}
double slope(ll a,ll b)
{return (double)(S[a]-S[b])/(h[a]-h[b]);}
void cdq(ll l,ll r){if(l==r){S[l]=f[l]-s[l]+h[l]*h[l];return;}ll mid=(l+r)>>1,cnt1=l-1,cnt2=mid;for(ll i=l;i<=r;i++)if(p[i]<=mid)q[++cnt1]=p[i];else q[++cnt2]=p[i];for(ll i=l;i<=r;i++)p[i]=q[i];cdq(l,mid);ll tot=0;for(ll i=l;i<=mid;i++){if(h[p[i]]==h[p[i-1]]&&i!=l)continue;while(tot>1&&slope(st[tot-1],st[tot])>slope(st[tot-1],p[i]))tot--;st[++tot]=p[i];}for(ll i=mid+1;i<=r;i++){while(tot>1&&slope(st[tot-1],st[tot])>2*h[p[i]])tot--;f[p[i]]=min(f[p[i]],s[p[i]-1]+h[p[i]]*h[p[i]]+S[st[tot]]-2*h[p[i]]*h[st[tot]]);}cdq(mid+1,r);sort(p+l,p+r+1,cMp);return;
} 
int main()
{memset(f,0x3f,sizeof(f));scanf("%lld",&n);f[1]=0;for(ll i=1;i<=n;i++)scanf("%lld",&h[i]),p[i]=i;for(ll i=1;i<=n;i++)scanf("%lld",&s[i]),s[i]+=s[i-1];sort(p+1,p+1+n,cmp);cdq(1,n);   printf("%lld",f[n]);return 0; 
} 

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

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

相关文章

Codefroces1077F2. Pictures with Kittens (hard version)

Codefroces1077F2. Pictures with Kittens (hard version) 做法&#xff1a;裸的单调队列优化dp #include <bits/stdc.h> #define P pair<ll,ll> #define fr first #define sc second typedef long long ll; using namespace std; int n, m, x; ll dp[5002][5002],…

IdentityServer4 知多少

1. 引言现在的应用开发层出不穷&#xff0c;基于浏览器的网页应用&#xff0c;基于微信的公众号、小程序&#xff0c;基于IOS、Android的App&#xff0c;基于Windows系统的桌面应用和UWP应用等等&#xff0c;这么多种类的应用&#xff0c;就给应用的开发带来的挑战&#xff0c;…

【线段树】矮人排队(jzoj(gz) 3236)

矮人排队 jzoj &#xff08;gz&#xff09;3236 题目大意&#xff1a; 有n个人&#xff0c;高度分别为1,2……n&#xff08;高度按输入来看&#xff09;&#xff0c;现在有两种操作 1&#xff1a;把第x个人和第y个人换一下 2&#xff1a;询问高度为A&#xff0c;A1……B这B-…

牛客网【每日一题】4月2日 月月查华华的手机

牛客网链接 时间限制&#xff1a;C/C 2秒&#xff0c;其他语言4秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld 题目描述 月月和华华一起去吃饭了。期间华华有事出去了一会儿&#xff0c;没有带手机。月月出于人类最单纯的好奇心&#…

P3466-[POI2008]KLO-Building blocks【Treap】

正题 题目链接:https://www.luogu.com.cn/problem/P3466 题目大意 nnn个数&#xff0c;每次可以让一个111或−1-1−1&#xff0c;要求操作次数最少使得有连续kkk个相同的。 解题思路 枚举是哪kkk个&#xff0c;然后用平衡树&#xff08;或对顶堆&#xff09;维护中位数和比中…

Codeforces1080F. Katya and Segments Sets

Codeforces1080F. Katya and Segments Sets 题意&#xff1a;给定n个集合&#xff0c;每个集合里有一些区间\([l_i,r_i]\)&#xff0c;有m次询问&#xff0c;每次询问区间\([x,y]\)中&#xff0c;是否包含了集合a到集合b中每个集合至少一个区间。 做法&#xff1a;按区间右端点…

【二分】Best Cow Fences(poj 2018)

Best Cow Fences poj 2018 题目大意&#xff1a; 给出一个正整数数列&#xff0c;要你求平均数最大&#xff0c;长度不小于M的字串&#xff0c;结果乘1000取整 输入样例 10 6 6 4 2 10 3 8 5 9 4 1输出样例 6500数据范围 1⩽N⩽100,0001\leqslant N \leqslant 100,0001⩽…

离散哈特莱变换(DHT)及快速哈特莱变换(FHT)学习

离散哈特莱变换(DHT)及快速哈特莱变换(FHT)学习 说在前边 最近复习\(DSP\)的时候&#xff0c;发现了一个号称专门针对离散实序列的变换&#xff0c;经分析总运算量为普通\(FFT\)的几乎一半&#xff0c;而且完全没有复数。这么强的吗&#xff1f;于是花了一个下午&#xff0c;去…

P2495-[SDOI2011]消耗战【虚树,dp】

正题 题目链接:https://www.luogu.com.cn/problem/P2495 题目大意 nnn个点的一棵树&#xff0c;mmm次给出一些点&#xff0c;要求割掉最小权值的边使得这些点不和111号点联通。 解题思路 根据这些给出的点构造一棵虚树&#xff0c;然后直接dpdpdp求解即可。 codecodecode #i…

【贪心】Sunscreen(poj 3614/luogu 2887)

Sunscreen poj 3614 luogu 2887 题目大意&#xff1a; 有n个人&#xff0c;每个人要求选一个价值在minniminn_iminni​到maxximaxx_imaxxi​的物品&#xff0c;现在有m件物品&#xff0c;每件的价值是spfispf_ispfi​&#xff0c;可以选covericover_icoveri​次&#xff0c…

.NET Core 2.1中的分层编译(预览)

如果您是.NET性能的粉丝&#xff0c;最近有很多好消息&#xff0c;例如.NET Core 2.1中的性能改进和宣布.NET Core 2.1&#xff0c;但我们还有更多的好消息。分层编译是一项重要的新特性功能&#xff0c;我们可以作为预览供任何人试用&#xff0c;从.NET Core 2.1开始。在我们测…

Codeforces 刷题记录(已停更)

Codeforces 每日刷题记录 (已停更) 打‘’是一些有启发意义的题目&#xff0c;部分附上一句话题解&#xff0c;每日更新3题&#xff0c;大部分题目较水。 DayIDProblemTutorialNote11CF1073E状压&#xff0c;数位dp&#xff0c;官方题解std骚操作\(~\)2CF1072A\(~\)3CF1072B24C…

牛客练习赛60 ~ 斩杀线计算大师

题目传送 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K Special Judge, 64bit IO Format: %lld 题目描述 算术能力是每个炉石玩家必不可少的&#xff0c;假设现在有三种伤害卡&#xff0c;伤害值分别是a,b…

【贪心】Stall Reservations(luogu 2859/poj 3190)

Stall Reservations luogu 2859 poj 3190 题目大意&#xff1a; 有n头牛&#xff0c;每头牛都有自己的挤奶时间&#xff0c;挤奶时间内每头牛用一个奶棚&#xff0c;现在问最少需要多少个奶棚 输入样例 5 1 10 2 4 3 6 5 8 4 7输出样例 4 1 2 3 2 4数据范围 1⩽N⩽50,00…

选择IT事业,意味着终身学习

八月&#xff0c;炎阳如火。 前几天书记找我交流&#xff0c;问我离职的原因&#xff0c;我跟他仔细的分析了一下我的职业发展规划和我对于未来的预期&#xff0c;书记也向我分析了一下他所认为的原因&#xff0c;他说&#xff0c;无外乎是三个原因&#xff1a;第一个是钱的问…

P4103-[HEOI2014]大工程【虚树,dp】

正题 题目链接:https://www.luogu.com.cn/problem/P4103 题目大意 nnn个点的一棵树&#xff0c;mmm次给出一些点&#xff0c;求最近点对&#xff0c;最远点对和所有点对的距离和。 解题思路 先构造一棵虚树&#xff0c;然后在上面dpdpdp统计答案即可。 codecodecode #includ…

牛客网【每日一题】Shortest Path 4月3日题目精讲 DFS

题号 NC13886 Shortest Path 西南交通大学第十三届ACM决赛 题意&#xff1a; 一棵偶数节点的树&#xff0c;分成n/2对&#xff0c;两两一组&#xff0c;所有组的路径之和最小是多少&#xff1f; 题解&#xff1a; 如果两个点之间相连将另外两个相连的点覆盖&#xff0c;那么完全…

是男人就过 8 题--Pony.AI 题 - A String Game

是男人就过 8 题--Pony.AI 题 - A String Game 题目来源 题意&#xff1a;给一个串t以及n个t的子串s&#xff0c;两个人每轮可以选择一个s在他的后边添加一个字符满足得到的新串仍是t的子串&#xff0c;第一个不能操作的人输。 做法&#xff1a;对s串建SAM&#xff0c;在一个子…

使用Jexus服务器运行Asp.Net Core2.0程序

前段时间写了篇关于.net core跨平台部署的文章。https://my.oschina.net/lichaoqiang/blog/1861977主要讲述了&#xff0c;利用NginxCentOSSupervisor.NetCore2.1&#xff0c;来运行.net core程序&#xff0c;感兴趣的朋友可以看一下。今天向大家介绍.net core使用jexus服务器的…

【结论】棋盘(jzoj 2297)

棋盘 jzoj 2297 题目大意&#xff1a; 在棋盘上有一个特殊的象&#xff0c;他可以向四个方向行走若干步&#xff08;左上&#xff0c;左下&#xff0c;右上&#xff0c;右下&#xff09;&#xff0c;现在问从某一个点是否能到另外一个点 输入样例 5 1 1 2 2 2 3 2 2 1 2 4…