CH

Description

在一条环形公路旁均匀地分布着N座仓库,编号为1~N,编号为 i 的仓库与编号为 j 的仓库之间的距离定义为 dist(i,j)=min⁡(|i-j|,N-|i-j|),也就是逆时针或顺时针从 i 到 j 中较近的一种.每座仓库都存有货物,其中编号为 i 的仓库库存量为 Ai.在 i 和 j 两座仓库之间运送货物需要的代价为 Ai+Aj+dist(i,j).求在哪两座仓库之间运送货物需要的代价最大.1≤N≤10^6,1<=Ai<=10^7.

Sol

断环为链,再复制一段到末尾

枚举i,我们只需要找到一个在[i-N/2,i-1]之间找到一个j使得(a[j]-j)最大,就求出了当前的最大代价.

找j当然不能枚举(N的范围就在上面),可以用单调队列维护.

具体来说,双端单调队列的队头放的是a[j]-j的最大值,以及j值(即它的序号),每次i++,把j超过范围(<i-N/2)的移出队列,把队列里比a[i-1]-(i-1)小的移出队列,再将a[i-1]-(i-1)加入队列,最后取出队头,即使当前a[j]-j的最大值.

如果关于单调队列的部分不明白,建议做Luogu1886滑动窗口

至于双端,用deque辣QwQ

Code

这题的code还是很好实现的 : ) 好久没有一遍过了QwQ

 #include<iostream>
#include<cstdio>
#include<queue>
#define Rg register
#define il inline
#define go(i,a,b) for(Rg int i=a;i<=b;++i)
using namespace std;
il int read()
{
int x=,y=;char c=getchar();
while(c<''||c>''){if(c=='-')y=-;c=getchar();}
while(c>=''&&c<=''){x=(x<<)+(x<<)+c-'';c=getchar();}
return x*y;
}
const int N=1e6+;
int n,m,ans,a[N*];
deque<int>q;
int main()
{
n=read();m=n<<;
go(i,,n)a[i]=a[n+i]=read();
go(i,,m)
{
while(q.size()&&i-q.front()>n/)q.pop_front();
while(q.size()&&a[i-]-i>a[q.back()]-q.back())q.pop_back();
q.push_back(i-);
ans=max(ans,a[i]+i+a[q.front()]-q.front());
}
printf("%d\n",ans);
return ;
}

随机推荐

  1. 《C语言深度解剖》学习笔记之函数

    第6章 函数 1.编码风格 [规则6-1]每一个函数都必须有注释 [规则6-2]每个函数定义之后以及每个文件结束之后都要加若干个空行 [规则6-3]在一个函数体内,变量定义与函数语句之间要加空行 [规 ...

  2. @codechef - SERSUM@ Series Sum

    目录 @description@ @solution@ @part - 1@ @part - 2@ @part - 3@ @accepted code@ @details@ @description@ ...

  3. 20190608笔试题のCSS-属性继承

    以下的CSS属性哪些可以继承?(单选) A.   font-sizeB.   marginC.   widthD.   padding emmm,这题答案是A,看到这题我是能选对的,但又不由让我想到一 ...

  4. angular input框点击别处 变成不可输入状态

    <input type="text" ng-model="edit" ng-disabled="!editable" focus-me ...

  5. Laravel实现定时任务的示例代码

    https://mp.weixin.qq.com/s/VUEqjwcHRb0ovhP0wup36A 最近在玩Laravel实现定时任务,这个是示例代码,可以参照这个实例.有需要的可以看看 定时任务是后 ...

  6. HTML静态网页--JavaScript-DOW操作

    1.DOM的基本概念 DOM是文档对象模型,这种模型为树模型:文档是指标签文档:对象是指文档中每个元素:模型是指抽象化的东西. 2.Windows对象操作 一.属性和方法: 属性(值或者子对象): o ...

  7. win7 debug 工具

    x86 处理器中的 CS 与 IP 寄存器介绍与调试: http://blog.sina.com.cn/s/blog_54f82cc2010121yj.html https://www.jianshu ...

  8. Flex AIR使用ADT命令打包 ipa

    1. 配置环境变量. 2. 测试adt命令 3. 将ShepherdPhone0815.mobileprovision和 my.p12文件都放入编译好的工程目录下,如下图: 4.切换到上述编译好的目录 ...

  9. H3C PPP协议的组成

  10. react入门:todo应用

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...