[JSOI2016]灯塔
Description
$JSOI$的国境线上有$N$一座连续的山峰,其中第$i$座的高度是$h_i$.为了简单起见,我们认为这$N$座山峰排成了连续一条直线.
如果在第$i$座山峰上建立一座高度为$p(p\;\geq\;0)$的灯塔,$JYY$发现,这座灯塔能够照亮第$j$座山峰,当且仅当满足如下不等式:
$h_j\;\leq\;h_i+p+\sqrt{|i-j|}$
$JSOI$国王希望对于每一座山峰,$JYY$都能提供建造一座能够照亮全部其他山峰的灯塔所需要的最小高度.你能帮助$JYY$么?
HINT
$1<N\;\leq\;10^5,0<h_i\;\leq\;10^9$.
Solution
题解过段时间补.
先贴$Menci$神犇的:
#include<cmath>
#include<ctime>
#include<stack>
#include<queue>
#include<cstdio>
#include<vector>
#include<cstring>
#include<iostream>
#include<algorithm>
#define K 17
#define N 100001
struct section{
int l,r;
}s[N];
int st[N][K],h[N],m[N],sq[N],log_2[N],n,ans;
double k;
inline int read(){
int ret=0;char c=getchar();
while(!(c>='0'&&c<='9'))
c=getchar();
while(c>='0'&&c<='9'){
ret=ret*10+c-'0';c=getchar();
}
return ret;
}
inline int sqr(int k){
return k*k;
}
inline int max(int x,int y){
return x>y?x:y;
}
inline void ini_st(){
log_2[1]=0;
for(int i=2;i<=n;i++){
log_2[i]=log_2[i-1];
if((1<<log_2[i]+1)==i)/*pow(2,log_2[i]+1)==i*/
log_2[i]++;
}
for(int i=n;i>=1;i--){
st[i][0]=h[i];
for(int j=1;(i+(1<<j)-1)<=n;j++)
st[i][j]=max(st[i][j-1],st[i+(1<<j-1)][j-1]);
}
}
inline int ask(int l,int r){
if(l<1) l=1;
if(r>n) r=n;
int len=r-l+1,k=log_2[len];
return max(st[l][k],st[r-(1<<k)+1][k]);
}
inline void init(){
scanf("%d",&n);
k=sqrt(n);
int l=(int)(k);
if(k>l) l++;
for(int i=1;i<=n;i++)
scanf("%d",&h[i]);
for(int i=1;i<=l;i++){
s[i].l=sqr(i-1)+1;
s[i].r=sqr(i);
for(int j=s[i].l;j<=s[i].r;j++)
sq[j]=i;
}
ini_st();
for(int i=1;i<=n;i++,ans=0){
for(int j=sq[i-1];j>=1;j--){
ans=max(ans,ask(i-s[j].r,i-s[j].l)+j);
}
for(int j=sq[n-i];j>=1;j--){
ans=max(ans,ask(i+s[j].l,i+s[j].r)+j);
}
printf("%d\n",max(0,ans-h[i]));
}
}
int main(){
freopen("light.in","r",stdin);
freopen("light.out","w",stdout);
init();
fclose(stdin);
fclose(stdout);
return 0;
}
[JSOI2016]灯塔的更多相关文章
- [bzoj4850][Jsoi2016]灯塔
来自FallDream的博客,未经允许,请勿转载,谢谢. JSOI的国境线上有N一座连续的山峰,其中第ii座的高度是hi??.为了简单起见,我们认为这N座山峰排成了连续一条 直线.如果在第ii座山峰上 ...
- [BZOJ4850][JSOI2016]灯塔(分块/决策单调性优化DP)
第一种方法是决策单调性优化DP. 决策单调性是指,设i>j,若在某个位置x(x>i)上,决策i比决策j优,那么在x以后的位置上i都一定比j优. 根号函数是一个典型的具有决策单调性的函数,由 ...
- BZOJ4850/BZOJ2216 JSOI2016灯塔/Poi2011Lightning Conductor(决策单调性)
即对每个i最大化hj-hi+sqrt(|i-j|).先把绝对值去掉,正反各做一次即可.注意到当x>y时,sqrt(x+1)-sqrt(x)<sqrt(y+1)-sqrt(y),所以若对于i ...
- [BZOJ 4850][Jsoi2016]灯塔
传送门 #include <bits/stdc++.h> using namespace std; #define rep(i,a,b) for(int i=a;i<=b;++i) ...
- DP学习记录Ⅱ
DP学习记录Ⅰ 以下为 DP 的优化. 人脑优化DP P5664 Emiya 家今天的饭 正难则反.考虑计算不合法方案.一个方案不合法一定存在一个主食,使得该主食在多于一半的方法中出现. 枚举这个&q ...
- 「JSOI2016」灯塔
「JSOI2016」灯塔 传送门 我们先只计算照亮左边的灯塔的最低高度,计算右边的类同,然后只要取 \(\max\) 就好了. 那么稍微整理一下式子:\(p_i \ge h_j - h_i + \sq ...
- loj2074 「JSOI2016」灯塔
loj 题面错的--去bzoj上看吧qwq 观察到 \(\sqrt{|i-j|}\) 的取值只有 \(\sqrt{n}\) 级别个,然后就很显然了,rmq. #include <iostream ...
- ACM/ICPC 之 快排+归并排序-记录顺序对(TSH OJ-LightHouse(灯塔))
TsingHua OJ 上不能使用<algorithm>头文件,因此需要手写快排(刚开始写的时候自己就出了很多问题....),另外本题需要在给横坐标排序后,需要记录纵坐标的顺序对的数量,因 ...
- 【Tsinghua OJ】灯塔(LightHouse)问题
描述 海上有许多灯塔,为过路船只照明.从平面上看,海域范围是[1, 10^8] × [1, 10^8] . (图一) 如图一所示,每个灯塔都配有一盏探照灯,照亮其东北.西南两个对顶的直角区域.探照灯的 ...
随机推荐
- android菜鸟学习笔记29----Android应用向用户发送提示信息的方式总结
常见的向用户发送提示信息的方式有3种,分别为: 1)发送Toast信息 2)弹出对话框 3)发送通知 总结如下: 方式1:发送Toast信息: 这种方式最简单,在之前的学习中多次使用过.Toast是在 ...
- 巨蟒django之权限6: 权限控制表设计&&登录权限
1.权限控制表设计 内容 . 什么是权限? . 为什么要有权限? 不同用户拥有不同的功能 . 在web开发中,什么是权限? url 代表 权限 . 开发一个权限的组件,为什么要开发组件? . 表结构的 ...
- websocket集群情况下Nginx 代理出现的坑
那么问题的背景: A想给B发送socket 消息 ! A这消息 这时候被Nginx 轮询发到了C 服务器上! 擦! 这时候就蛋疼了! 要接收消息那个人在B服务器上! B就这样苦逼的收不 ...
- 客户端-服务器通信安全 sign key
API接口签名校验,如何安全保存appsecret? - 知乎 https://www.zhihu.com/question/40855191 要保证一般的客户端-服务器通信安全,可以使用3个密钥. ...
- JavaScript遍历IP段内所有IP
思路:将两个IP转换为数字进行比较,小的那个慢慢加一,直到变成大的那个IP所转换的数字,将这其中的数字再转换为IP地址即为IP段内所有的IP. //IP转数字 function ip2int(ip) ...
- Javascript-Switch
JavaScript Switch 语句 请使用 switch 语句来选择要执行的多个代码块之一. 语法 switch(n) { case 1: 执行代码块 1 break; case 2: 执行代码 ...
- Python如何实现单例模式?其他23种设计模式python如何实现?
#使用__metaclass__(元类)的高级python用法 class Singleton2(type): def __init__(cls, name, bases, dict): super( ...
- mac安装yarn , MAC升级Nodejs
Npm i -g yarn 第一步,先查看本机node.js版本: `$ node -v` 第二步,清除node.js的cache: `$ sudo npm cache clean -f` 第三步,安 ...
- Pycharm中SQL语句提示SQL Dialect is Not Configured
解决办法: 在File---->Setting--->Languages & Frameworks--->SQL Dialects中,选择对应的数据库,如MySQL,之后点击 ...
- mysql启动报错“NET HELPMSG 3534“的解决办法
原因: mysql安装步骤错误,从mysql5.7.6开始,mysql需要这样安装: mysqld --initialize-insecure或者mysqld --initialize mysqld ...