传送门

思路:

  遇到一个环,用正常人类的思想就先把环从中间截断然后将其补成2*n长度的链。环上的最小距离换到链上就是i以n/2为半径范围内的点(画图肉眼可见)。由于两个点是等价的,所以我们考虑有序对(i,j){1<=j<i<=2*n&&i-j<=n/2}

  题目要求最大的a[i]+a[j]+dis(i,j)。在上述条件下,dis(i,j)=i-j。那么就是要求a[i]+a[j]+i-j,只要枚举i,得到最大的a[j]-j就好了,考虑j的取值范围[i-n/2,i-1],用单调栈维护a[i]-j

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+;
int a[*maxn],q[*maxn],tail,head,ans;
int main()
{
int n;scanf("%d",&n);
for(int i=;i<=n;i++) scanf("%d",&a[i]);
for(int i=+n;i<=*n;i++) a[i]=a[i-n];
int c=n/;
for(int i=;i<=c;i++){
while(tail&&a[q[tail]]-q[tail]<=a[i]-i)
tail--;
q[++tail]=i;
}
head=;
ans=a[c+]+c+-q[head]+a[q[head]];
for(int i=;i<=n;i++){
int id=c-+i;
while(head<=tail&&q[head]<i) head++;
while(tail>=head&&a[q[tail]]-q[tail]<=a[id]-id) tail--;
q[++tail]=id;
ans=max(ans,a[id+]+id+-q[head]+a[q[head]]);
}
cout<<ans<<endl;
}

最新文章

  1. Oracle三大经典表连接适用情况
  2. jenkins2 hello pipeline
  3. div滑入与滑出
  4. php 上传文件。$_FILES
  5. 【转】Dr.com 5.20破解教程
  6. 0301——UItableView
  7. iOS 之 cocoapods安装与使用
  8. Retrofit相关资料
  9. diplay:table-cell和伪元素:after方法让图片居中
  10. flask-日料网站搭建-数据库操作
  11. iOS 点击屏幕空白区隐藏键盘方法
  12. 如何用浏览器在线查看.ipynb文件
  13. 【Python 17】B分R计算器1.0(数值类型)
  14. tornado--初识tornado
  15. Codeforces 1139E Maximize Mex 二分图匹配
  16. 和textrank4ZH代码一模一样的算法详细解读
  17. CAD技巧之002——如何用Cass内插高程点或者说加密高程点
  18. 在Hanlp词典手动添加未登录词的方式介绍
  19. Springmvc配置时间日期转换
  20. Form表单中的action提交路径问题

热门文章

  1. [vue ]滚动视图解决ElementUI NavMenu 导航菜单过长显示的问题
  2. 是的,GitHub APP 终于上线了
  3. SQL常见错误总结
  4. IOS抓包工具Stream——让移动端的抓包变得轻而易举
  5. VScode 快捷键大全
  6. hdu1541树状数组(降维打击)
  7. 《大空头》与A股内幕消息
  8. 【前端词典】这些功能其实不需要 JS,CSS 就能搞定
  9. SpringBoot项目中应用Jedis和一些常见配置
  10. CF 1012C Dp