【POI2011】【BZOJ2216】Lightning Conductor
2016-05-03 16:03
363 查看
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
HINT
Source
随便化一下式子就发现显然是决策单调的..
已知一个长度为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
HINT
Source
随便化一下式子就发现显然是决策单调的..
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<queue> #define MAXN 500010 #define GET (ch>='0'&&ch<='9') using namespace std; template <class classname> inline void in(classname &x) { char ch=getchar();x=0; while (!GET) ch=getchar(); while (GET) x=x*10+ch-'0',ch=getchar(); } int n; int a[MAXN]; double f[2][MAXN]; struct node { int l,r,x; node() {} node(int _l,int _r,int _x) { l=_l;r=_r;x=_x; } }q[MAXN]; inline double calc(int j,int i) { return a[j]+sqrt(abs(j-i))-a[i]; } inline int find(node d,int x) { int l=d.l,r=d.r,mid=(l+r)>>1; for (;l<=r;mid=(l+r)>>1) if (calc(x,mid)<calc(d.x,mid)) l=mid+1; else r=mid-1; return l; } void solve(int id) { for (int i=1,h=1,t=0,j;i<=n;i++) { if (h<=t&&++q[h].l>q[h].r) h++;f[id][i]=calc(q[h].x,i); if (h>t||calc(i,n)>calc(q[t].x,n)) { while (h<=t&&calc(i,q[t].l)>calc(q[t].x,q[t].l)) t--; if (h<=t) j=find(q[t],i),q[t].r=j-1,q[++t]=node(j,n,i); else q[++t]=node(i,n,i); } } } int main() { in(n); for (int i=1;i<=n;i++) in(a[i]); solve(0); for (int i=1;i<=(n>>1);i++) swap(a[i],a[n-i+1]); solve(1); for (int i=1;i<=n;i++) printf("%d\n",max(0,(int)ceil(max(f[0][i],f[1][n-i+1])))); }
相关文章推荐
- 详解Android应用中屏幕尺寸的获取及dp和px值的转换
- 基于Android中dp和px之间进行转换的实现代码
- Android中dip、dp、sp、pt和px的区别详解
- LFC1.0.0 版本发布
- Android px、dp、sp之间相互转换
- HP data protector软件学习1--基本角色与基本工作流程
- HP data protector软件学习2--软件组成与界面介绍
- android中像素单位dp、px、pt、sp的比较
- Android对px和dip进行尺寸转换的方法
- Android根据分辨率进行单位转换-(dp,sp转像素px)
- android 尺寸 dp,sp,px,dip,pt详解
- DP问题各种模型的状态转移方程
- POJ-1695-Magazine Delivery-dp
- nyoj-1216-整理图书-dp
- TYVJ1193 括号序列解题报告
- 对DP的一点感想
- TYVJ上一些DP的解题报告
- soj1005. Roll Playing Games
- 01背包问题
- LeetCode之Maximum Product Subarray