来自FallDream的博客,未经允许,请勿转载,谢谢。

JSOI的国境线上有N一座连续的山峰,其中第ii座的高度是hi??.为了简单起见,我们认为这N座山峰排成了连续一条
直线.如果在第ii座山峰上建立一座高度为p(p≥0)的灯塔,JYY发现,这座灯塔能够照亮第jj座山峰,当且仅当满足如
下不等式:hj≤hi+p-(是减号)sqrt(|i-j|)JSOI国王希望对于每一座山峰,JYY都能提供建造一座能够照亮全部其他山峰的灯
塔所需要的最小高度.你能帮助JYY么?
1< N ≤ 10^5
0 < hi ≤ 10^9
话说这个出题人非常的不走心 同bzoj2216 5年前的题 样例都不改就扔了一个假的公式出来。
暴力比较显然,可以预处理rmq,然后根号枚举。
考虑两个点j,k,那么显然一个点分别从两个点转移的情况都是一段区间,可以二分求出最小的满足从j转移比从k转移优的i。
然后开一个单调队列,维护队列中两两相邻元素,前一个比后一个优的最小的i 单调递增。
复杂度nlogn
#include<iostream>
#include<cstdio>
#include<cmath>
#define getchar() (*S++)
#define MN 500000
#define INF 2000000000
char B[1<<26],*S=B;
using namespace std;
inline int read()
{int x = 0 , f = 1; char ch = getchar();while(ch < '0' || ch > '9'){ if(ch == '-') f = -1;  ch = getchar();}while(ch >= '0' && ch <= '9'){x = x * 10 + ch - '0';ch = getchar();}return x * f;
}int n,a[MN+5],top,tail,q[MN+5];
double F[MN+5],G[MN+5],sq[MN+5];
inline int My_abs(int x){return x<0?-x:x;}
double Get(int x,int y){return a[x]+sq[My_abs(y-x)];}int Calc(int x,int y)
{int l=y,r=n,mid,ans=INF;while(l<=r){mid=l+r>>1;if(Get(y,mid)>=Get(x,mid)) ans=mid,r=mid-1;else l=mid+1;   }return ans;
}void Solve(double*f)
{top=0;tail=1;   for(register int i=1;i<=n;++i){if(top<tail||a[i]>a[q[top]]) {while(top>tail&&Calc(q[top],i)<=Calc(q[top-1],q[top])) --top; q[++top]=i;}while(top>tail&&Calc(q[tail],q[tail+1])<=i) ++tail;f[i]=Get(q[tail],i)-a[i];}
}int main()
{fread(B,1,1<<26,stdin);n=read();for(int i=0;i<=n;++i) sq[i]=sqrt(i);for(int i=1;i<=n;++i) a[i]=read();Solve(F);for(int i=1;i<=n>>1;++i) swap(a[i],a[n+1-i]);Solve(G);for(int i=1;i<=n;++i) printf("%d\n",max(0,(int)ceil(max(F[i],G[n+1-i]))));return 0;
}

转载于:https://www.cnblogs.com/FallDream/p/bzoj4850.html

[bzoj4850][Jsoi2016]灯塔相关推荐

  1. bzoj4850 [JSOI2016]灯塔

    bzoj4850 [JSOI2016]灯塔 给定一个序列 \(a_i\) ,对于每个 \(i\) ,求出一个 \(p\) 使得对于任意 \(j\) ,都有 \(a_j\leq a_i+p-\sqrt ...

  2. [bzoj4850][贪心]灯塔

    Description JSOI的国境线上有N一座连续的山峰,其中第ii座的高度是hi??.为了简单起见,我们认为这N座山峰排成了连续一条 直线.如果在第ii座山峰上建立一座高度为p(p≥0)的灯塔, ...

  3. bzoj 4850 [Jsoi2016]灯塔

    Description JSOI的国境线上有N一座连续的山峰,其中第ii座的高度是hi??.为了简单起见,我们认为这N座山峰排成了连续一条 直线.如果在第ii座山峰上建立一座高度为p(p≥0)的灯塔, ...

  4. 基础省选+NOI-第4部分 动态规划

    1.期望概率DP [整理]简单的数学期望和概率DP [整理]简单的数学期望和概率DP - nimphy - 博客园 期望&概率dp总结 期望&概率dp总结_十分残念的博客-CSDN博客 ...

  5. 省选+NOI 第一部分 动态规划DP

    期望概率DP [整理]简单的数学期望和概率DP [整理]简单的数学期望和概率DP - nimphy - 博客园 期望&概率dp总结 期望&概率dp总结_十分残念的博客-CSDN博客 期 ...

  6. 退役前的做题记录1.0

    退役前的做题记录1.0 租酥雨最近很懒qwq,具体表现在写题的时候不想发题解了. 但是想想这样也不太好,就决定发个一句话(半句话到几句话不等)题解上来. 2018-09.18-2018-09.28 [ ...

  7. 2020.6月做题记录

    长期计划 SAM专题 date:2020.05.21-2020.06.01 基础类: Problem Finished P3804 [模板]后缀自动机 (SAM) √√√ SP1811 LCS - L ...

  8. 【JSOI2016】【st表/猫树】【枚举】灯塔

    [题目描述] [思路] 这道题也很不错.首先这道题有O(nlog⁡n)O(n\log n)O(nlogn)做法,但是我不会,我就只会O(nn)O(n \sqrt n)O(nn​)+卡常的做法.这道题唯 ...

  9. 一条长度为l的笔直街道 java_如图,在一条笔直的东西向海岸线l上有一长为1.5km的码头MN和灯塔C,灯塔C距...

    如图,在一条笔直的东西向海岸线l上有一长为1.5km的码头MN和灯塔C,灯塔C距码头的东端N有20km.以轮船以36km/h的速度航行,上午10:00在A处测得灯塔C位于轮船的北偏西30°方向,上午1 ...

最新文章

  1. Java多态性Polymorphic
  2. xml tools属性详解
  3. DL之DNN:自定义MultiLayerNet(5*100+ReLU+SGD/Momentum/AdaGrad/Adam四种最优化)对MNIST数据集训练进而比较不同方法的性能
  4. 性能测试过程中oracle数据库报ORA-27301 ORA-27302错
  5. 5月7日MySQL 学习
  6. win11打开安全中心显示英文怎么办 windows11打开安全中心显示英文的解决方法
  7. Weex第一天:公共样式
  8. html不使用cache数据
  9. Presto内存泄露问题调查
  10. Linux svn服务器自身回退版本
  11. Layui字体图标大全
  12. 浅论汽车电子行业的汽车开放系统架构AUTOSAR
  13. mfs java_mfs权威指南
  14. All clients has disconnected from. You can graceful shutdown now., dubbo version: , current host
  15. 小哥凭“量子速读”绝技吸粉59万:看街景图0.1秒,“啪的一下”在世界地图精准找到!...
  16. 人工智能知识全面讲解:生成对抗网络的应用
  17. 支持电竞比分实时查询的软件~和比分网之间的对比
  18. go(gin框架)session底层使用redis实现(gorilla/sessions和gin-contrib/sessions)
  19. 小学数学计算机教案模板,小学数学信息化教学设计模板.doc
  20. 干货分享丨一文给“物联网小白”讲清楚什么是无线通信模块

热门文章

  1. 用linux定时备份文件,Linux下定时备份文件
  2. 用eaxyx 写的五子棋,功能包括: 禁手判断,棋局保存,悔棋,重新开局,全部通过鼠标操作
  3. win10计算机搜索记录怎么删除,Windows10系统怎样删除浏览器搜索记录?
  4. 学习欧拉phi函数的思考
  5. 微信视频号不同的认证图标表示什么含义?
  6. 世界坐标系、相机坐标系、图像坐标系、像素坐标系都是什么?
  7. 机器学习实验四:深度学习图像生成(Part two:DeepDream)
  8. package xxx is not in GOROOT——go mod踩坑实录
  9. 网易雷火2020秋招平台开发笔试-编程题
  10. jQuery如何判断是否拥有某属性以及添加移除(先判断有没有)某属性