Description

已知一个长度为n的序列a1,a2,…,an。
对于每个1<=i<=n,找到最小的非负整数p满足 对于任意的j, aj < = ai + p – sqrt(abs(i-j))

Input

第一行n,(1<=n<=500000)
下面每行一个整数,其中第i行是ai。(0<=ai<=1000000000)

Output

n行,第i行表示对于i,得到的p

Sample Input

6
5
3
2
4
2
4

Sample Output

2
3
5
3
5
4

题解

http://ydcydcy1.blog.163.com/blog/static/2160890402013315391435/

 #include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<cstdio> #define ll long long
#define N 500007
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if (ch=='-') f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=(x<<)+(x<<)+ch-'';ch=getchar();}
return x*f;
}int n;
int a[N];
double f[N],g[N];
struct data{int l,r,p;}q[N];
double cal(int j,int i)
{
return a[j]+sqrt(abs(i-j))-a[i];
}
int find(data t,int x)
{
int l=t.l,r=t.r;
while(l<=r)
{
int mid=(l+r)>>;
if(cal(t.p,mid)>cal(x,mid))
l=mid+;
else r=mid-;
}
return l;
}
void dp(double *F)
{
int head=,tail=;
for(int i=;i<=n;i++)
{
q[head].l++;
if(head<=tail&&q[head].r<q[head].l)head++;
if(head>tail||cal(i,n)>cal(q[tail].p,n))
{
while(head<=tail&&cal(q[tail].p,q[tail].l)<cal(i,q[tail].l))
tail--;
if(head>tail)
q[++tail]=(data){i,n,i};
else
{
int t=find(q[tail],i);
q[tail].r=t-;
q[++tail]=(data){t,n,i};
}
}
F[i]=cal(q[head].p,i);
}
}
int main()
{
n=read();
for(int i=;i<=n;i++)a[i]=read();
dp(f);
for(int i=;i<=n/;i++)swap(a[i],a[n-i+]);
dp(g);
for(int i=;i<=n;i++)
printf("%d\n",max(,(int)ceil(max(f[i],g[n-i+]))));
return ;
}

最新文章

  1. Linux的.a、.so和.o文件
  2. Java中将unix时间戳转化为正常显示时间
  3. MAC、IDFA、IMEI正则表达式
  4. C语言 文件操作2--文件缓存的理解
  5. DevExpress navBarControl 和 xtraTabbedMdiManager实现浏览器标签页效果
  6. JS预览图像将本地图片显示到浏览器上的代码
  7. apache http server 局域网无法访问
  8. (转)Maven实战(二)构建简单Maven项目
  9. Windows最常用的几个网络CMD命令总结
  10. Atitit.Hibernate于Criteria 使用汇总and 关系查询 and 按照子对象查询 o9o
  11. java.lang.VerifyError
  12. gettimeofday(struct timeval *tv, struct timezone *tz)函数
  13. cocos2d-x 3.x 橡皮擦功能
  14. post提交数据长度限制问题
  15. AFN默认请求和响应的处理
  16. 了解前端中的SPA
  17. Markdown中使用mermaid画流程图
  18. Vue2.0+Node.js+MongoDB全栈打造商城系统 免费下载
  19. 【响应式编程的思维艺术】 (2)响应式Vs面向对象
  20. 【Java】Java随手记

热门文章

  1. 广播监听USB插入与拔出
  2. Dojo的on函数(以前的dojo.connect)
  3. django 数据库中中文转化为韩语拼音
  4. ps基础实例
  5. -安装与配置 FTP 服务器
  6. pandas中的随机排序和抽样
  7. Ubuntu16.04安装后开发工作的配置
  8. Vue源码探究-全局API
  9. 简单了解hash
  10. ASCII码表含义