[BZOJ3156] 防御准备
来源:互联网 发布:phpcms数据库配置文件 编辑:程序博客网 时间:2024/06/06 05:20
设
那么
考虑用斜率优化
设
那么可以得到
化简得
设
于是可以得到,弹队首的条件:满足
弹队尾的条件:满足
时间复杂度
#include <cstdio>using namespace std;template <class T>T Max (const T &a, const T &b) {return a > b ? a : b;}template <class T>T Min (const T &a, const T &b) {return a < b ? a : b;}typedef long long LL;typedef double dl;const int SN = 1000000 + 100;LL a[SN], n, f[SN];int que[SN], head, tail;void Read(LL &x) { LL in = 0, f = 1;char ch = getchar(); while(ch<'0' || ch>'9') {if(ch=='-') f = -1;ch = getchar();} while(ch>='0' && ch<='9') {in = in*10+ch-'0'; ch = getchar();} x = in*f;}LL get_up(LL i,LL j) { //i,j都要开long long return 2*(f[i]-f[j])+i*i-j*j+i-j;}dl get_slope(LL i,LL j) { return (double)((get_up(i,j))/(double)(i-j));}int main() { Read(n); for(int i = 1; i <= n; i++) Read(a[i]); for(int i = 1; i <= n; i++) { while(head < tail && get_slope(que[head+1],que[head])<= 2*i) head++; f[i] = f[que[head]] + (i-que[head])*(i-que[head]-1)/2 + a[i]; while(head < tail && get_slope(i, que[tail]) <= get_slope(que[tail], que[tail-1])) tail--; que[++tail] = i; } printf("%lld\n",f[n]); return 0;}
阅读全文
0 0
- BZOJ3156 防御准备
- [BZOJ3156]防御准备
- [BZOJ3156] 防御准备
- bzoj3156 防御准备
- bzoj3156 防御准备
- BZOJ3156: 防御准备
- [BZOJ3156] 防御准备
- bzoj3156 防御准备
- BZOJ3156: 防御准备
- bzoj3156 防御准备(斜率优化)
- bzoj3156 防御准备(斜率)
- bzoj3156: 防御准备 斜率优化DP
- 【BZOJ3156】防御准备 斜率优化DP
- 【BZOJ3156】防御准备,斜率优化DP
- [BZOJ3156]防御准备(斜率优化dp)
- [bzoj3156] 防御准备 DP斜率优化
- BZOJ3156: 防御准备 【斜率优化dp】
- [bzoj3156][dp+斜率优化]防御准备
- OpenGL读取Obj模型文件
- 2017年PHP培训机构排名
- 安卓获取url重定向后的url
- 使用LODOP设计打印模板
- 清北 游
- [BZOJ3156] 防御准备
- Shell脚本基础14-数组
- SringMVC @Param的作用
- 纯js实现复制到剪贴板
- webpack完整教程(一)
- Spring_MVC前段数据验证,Validater验证器
- 测试CPU字节序,Chack CPU endian
- BrainFuck语言的解释器(java实现)
- Java 多态中的类型转换(instanceof)