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]灯塔的更多相关文章

  1. [bzoj4850][Jsoi2016]灯塔

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

  2. [BZOJ4850][JSOI2016]灯塔(分块/决策单调性优化DP)

    第一种方法是决策单调性优化DP. 决策单调性是指,设i>j,若在某个位置x(x>i)上,决策i比决策j优,那么在x以后的位置上i都一定比j优. 根号函数是一个典型的具有决策单调性的函数,由 ...

  3. BZOJ4850/BZOJ2216 JSOI2016灯塔/Poi2011Lightning Conductor(决策单调性)

    即对每个i最大化hj-hi+sqrt(|i-j|).先把绝对值去掉,正反各做一次即可.注意到当x>y时,sqrt(x+1)-sqrt(x)<sqrt(y+1)-sqrt(y),所以若对于i ...

  4. [BZOJ 4850][Jsoi2016]灯塔

    传送门 #include <bits/stdc++.h> using namespace std; #define rep(i,a,b) for(int i=a;i<=b;++i) ...

  5. DP学习记录Ⅱ

    DP学习记录Ⅰ 以下为 DP 的优化. 人脑优化DP P5664 Emiya 家今天的饭 正难则反.考虑计算不合法方案.一个方案不合法一定存在一个主食,使得该主食在多于一半的方法中出现. 枚举这个&q ...

  6. 「JSOI2016」灯塔

    「JSOI2016」灯塔 传送门 我们先只计算照亮左边的灯塔的最低高度,计算右边的类同,然后只要取 \(\max\) 就好了. 那么稍微整理一下式子:\(p_i \ge h_j - h_i + \sq ...

  7. loj2074 「JSOI2016」灯塔

    loj 题面错的--去bzoj上看吧qwq 观察到 \(\sqrt{|i-j|}\) 的取值只有 \(\sqrt{n}\) 级别个,然后就很显然了,rmq. #include <iostream ...

  8. ACM/ICPC 之 快排+归并排序-记录顺序对(TSH OJ-LightHouse(灯塔))

    TsingHua OJ 上不能使用<algorithm>头文件,因此需要手写快排(刚开始写的时候自己就出了很多问题....),另外本题需要在给横坐标排序后,需要记录纵坐标的顺序对的数量,因 ...

  9. 【Tsinghua OJ】灯塔(LightHouse)问题

    描述 海上有许多灯塔,为过路船只照明.从平面上看,海域范围是[1, 10^8] × [1, 10^8] . (图一) 如图一所示,每个灯塔都配有一盏探照灯,照亮其东北.西南两个对顶的直角区域.探照灯的 ...

随机推荐

  1. java 对list 排序

    Comparable用Collections.sort方法对list排序有两种方法第一种是list中的对象实现Comparable接口,如下: /*** 根据order对User排序*/public  ...

  2. Java中Solr集群的测试

    import org.apache.solr.client.solrj.impl.CloudSolrServer; import org.apache.solr.common.SolrInputDoc ...

  3. java.lang.Error: Unresolved compilation problems: Syntax error on token "return", delete this token Type mismatch: cannot convert from Init to String

    java.lang.Error: Unresolved compilation problems:   Syntax error on token "return", delete ...

  4. NoSQL 数据库分类 颠覆

    NoSQL 数据库分类 类型 部分代表特点 列存储 HbaseCassandraHypertable顾名思义,是按列存储数据的.最大的特点是方便存储结构化和半结构化数据,方便做数据压缩,对针对某一列或 ...

  5. 将电脑中编写的app网页放到手机上访问

    http://jingyan.baidu.com/article/3065b3b6e5becdbecff8a4d5.html 1.在控制面板-管理工具找不到IIS,则先在程序-打开或关闭window功 ...

  6. Python— 匿名函数

    匿名函数 匿名函数:为了解决那些功能很简单的需求而设计的  “一句话函数” #初始代码 def calc(n): return n**n print(calc(10)) #换成匿名函数 calc = ...

  7. leetCode 64.Minimum Path Sum (最短路) 解题思路和方法

    Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right which ...

  8. Dockerfile学习(一)

    FROM指令: 格式为:FROM<image>:<tag>或者FROM<image> Dockerfile的第一条指令必须是FROM,用来指定要制作的镜像继承自哪个 ...

  9. golang模板语法简明教程(后面有福利哦)

    template是go 语言web开发中必不可少的,特此记录下来: [模板标签] 模板标签用"{{"和"}}"括起来   [注释] {{/* a comment ...

  10. MySQL数据库(2)_MySQL数据库和数据库表操作语句

    一.关于数据库操作的sql语句 -- .创建数据库(在磁盘上创建一个对应的文件夹) create database [if not exists] db_name [character set xxx ...