标签:
首先最优策略肯定是这样的:我们取出这个序列中的最大值,然后将整个序列分为左右两部分, 那么我们一定先把左右两部分合起来然后再与这个值合并
那么我们可以得出一个基于最值查询(rmq)的的算法,但是zld上次出10^6级别的题目时,卡掉了的算法
所以我们想一个优秀一点的做法,发现这个过程可以简单的用一个单调队列维护,维护单调减的单调栈,就可以O(n)解决这个问题
我们仔细观察会发现更优秀的做法,答案一定是,但是这个玩意我不会证明
int a[2333333]; int main(){ FO(seq); RI(n); ll ans=0; FOR1(i,n)a[i]=gi; FOR1(i,n-1){ ans+=max(a[i],a[i+1]); } cout<<ans; }
未完待续
标签:
原文地址:http://www.cnblogs.com/chouti/p/5723926.html