Description

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

Input

输入一行包含一个正整数N。 接下来N行,第i行包含一个正整数ℎi,表示第i座山峰的高度。

Output

第i行包含一个非负整数,表示在第i座山峰上修建灯塔所需要的最小高度Pi

Sample Input

6

5

3

2

4

2

4

Sample Output

2

3

5

3

5

4

题解

把式子推一下可以发现
p>=hj−hi+sqrt(i−j)p>=hj−hi+sqrt(i−j)p>=hj-hi+sqrt(i-j)
于是答案就取max(hj−hi+sqrt(i−j))max(hj−hi+sqrt(i−j))max(hj-hi+sqrt(i-j))
由于n<=100000,那么最后一项最大不会超过314。题目中给定了p是大于等于0的,所以对于hj < hi的我们可以贪心地暂时不考虑
先按h排序,对于h相同的我们可以去重,只需要保留最左边与最右边的。每次询问的时候,从最大的h开始枚举。如果当前枚举的h比最大的h小了超过314,可以直接退出。因为再枚举的话sqrt(i−j)sqrt(i−j)sqrt(i-j)也不能把这个差距补回来
所以复杂度就是O(314n)O(314n)O(314n)啦
似乎与网上的思路都不一样???

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;
struct node
{int op,h;
}a[110000],b[110000];int n,len;
int answer[110000];
bool cmp(node n1,node n2)
{if(n1.h!=n2.h)return n1.h<n2.h;return n1.op<n2.op;
}
int main()
{scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d",&a[i].h),a[i].op=i;sort(a+1,a+1+n,cmp);for(int i=1;i<=n;i++)if(a[i+1].h!=b[len].h){if(a[i].op!=b[len].op)b[++len]=a[i];b[++len]=a[i+1];}len--;
//  for(int i=1;i<=len;i++)printf("%d %d\n",b[i].h,b[i].op);for(int i=1;i<=n;i++){int cnt=a[i].op,sum=a[i].h,ans=0;for(int j=len;j>=1;j--){if(b[len].h-b[j].h>=317)break;double num=(b[j].h-sum+sqrt(abs(b[j].op-cnt)));int tt=ceil(num);ans=max(ans,tt);}answer[cnt]=ans;}for(int i=1;i<=n;i++)printf("%d\n",answer[i]);return 0;
}

[bzoj4850][贪心]灯塔相关推荐

  1. bzoj4850 [JSOI2016]灯塔

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

  2. [bzoj4850][Jsoi2016]灯塔

    来自FallDream的博客,未经允许,请勿转载,谢谢. JSOI的国境线上有N一座连续的山峰,其中第ii座的高度是hi??.为了简单起见,我们认为这N座山峰排成了连续一条 直线.如果在第ii座山峰上 ...

  3. 退役前的做题记录1.0

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

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

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

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

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

  6. 算法设计与分析第3章 贪心算法

    第4章 贪心算法 贪心算法总是作出在当前看来最好的选择.也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择. 贪心算法的基本要素 1.贪心选择性质 所谓贪心选择性质是指所 ...

  7. 贪心算法单源点最短路径例题c语言源代码,Dijkstra算法是解单源最短路径问题的一个贪心算法...

    问题描述 给定一个带权有向图 G=(V,E) ,其中每条边的权是一个非负实数. 另外,还给定 V 中的一个项点,称为源. 现在我们要计算从源到所有其他各项点的最短路径长度. 这里的长度是指路上各边权之 ...

  8. Too Many Segments CF595D 贪心乱搞

    传送门! 比赛的时候没有时间写了,看看了看大佬的代码,学习学习. 一开始实验室大佬说是用差分写的,但是看了代码发现打cf的人大家都是stl狂魔! 贪心思路:区间按照左端点排序,从1~2e5遍历每一个点 ...

  9. Roundgod and Milk Tea 贪心

    这个题好像可以用一种类似与置换的贪心方法来做~ sum记为剩余奶茶,一开始sum等于奶茶和 ans记录已经喝的奶茶数 不用排序,我们就从前往后直接处理,考虑的是每一个班最多可以喝多少杯奶茶 就是从剩余 ...

最新文章

  1. 谷歌发布新编程语言,专治SQL各种“不服”
  2. 静态成员变量不占用类的内存空间
  3. java 发送cookie_Java如何在Servlet中发送cookie?
  4. SSL 的 java 实现
  5. __declspec(naked)详解
  6. Channel SDK (渠道SDK) for Unity
  7. P1268-树的重量【图论】
  8. 选择题:JAVA的类和对象
  9. php卡盟专用主机,php卡盟
  10. 断点运行的参数_利用 AicLaunchAdminProcess 参数污染 bypass UAC
  11. java 协变 逆变_JAVA中的协变与逆变
  12. php yar2,[原]PHP-yar拓展源码解读二-protocol篇
  13. 五、03【Java IO模型】之字节流
  14. 面对对象之差异化的网络数据交互方式--单机游戏开发之无缝切换到C/S模式
  15. 消费金融进入“第二赛段”,突围关键是什么?
  16. idea文件上传(通俗易懂!)
  17. HR/FR/EFR/AMR
  18. cfa的pv怎么用计算机算,CFA考试规定使用的计算器,以及它的使用方法
  19. 大型Excel插件SqlCel全新上市
  20. json字符串,JSONObject对象,JavaBean对象互转。

热门文章

  1. Mastering Embedded Linux Programming 学习 (一)嵌入式交叉编译工具链的构建,基于crosstool-NG
  2. 默纳克系统服务器怎么改不了参数,默纳克7000一体机调试参数
  3. 10分钟入门 ANSA API
  4. python 管道游戏_Python游戏编程(Pygame)
  5. 相芯科技助力华为Mate20Pro玩转3D Live Emoji
  6. python程序设计基础考试重点_python语言程序设计基础 复习整理 第1-3章
  7. STM32 ES8266上阿里云IOT MQTT实践【第二章】:物联网十大应用场景
  8. UI设计新手怎么入门 如何制作别具特色作品集
  9. 阿里安全归零实验室首度揭秘真实的“黄牛软件江湖”
  10. (前端学习)寒假第二周周报