BZOJ1911 [APIO2010] 特别行动队
2016-01-10 14:04
211 查看
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1911
View Code
Description
#include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #define rep(i,l,r) for(int i=l; i<=r; i++) #define clr(x,y) memset(x,y,sizeof(x)) using namespace std; typedef long long ll; const int maxn = 1000010; ll n,A,B,C,head,tail,f[maxn],q[maxn],s[maxn]; inline ll read(){ ll ans = 0, f = 1; char c = getchar(); for(; !isdigit(c); c = getchar()) if (c == '-') f = -1; for(; isdigit(c); c = getchar()) ans = ans * 10 + c - '0'; return ans * f; } inline ll calc(int x){ return f[x] + A * s[x] * s[x]; } inline ll get(int i,int j){ return f[j] + A * (s[i] - s[j]) * (s[i] - s[j]) + B * (s[i] - s[j]) + C; } int main(){ n = read(); A = read(); B = read(); C = read(); rep(i,1,n) s[i] = s[i-1] + read(); head = tail = f[0] = q[0] = 0; rep(i,1,n){ while (head < tail && calc(q[head+1]) - calc(q[head]) >= (2 * A * s[i] + B) * (s[q[head+1]] - s[q[head]])) head++; f[i] = get(i,q[head]); while (head < tail && (calc(q[tail]) - calc(q[tail-1])) * (s[i] - s[q[tail]]) <= (calc(i) - calc(q[tail])) * (s[q[tail]] - s[q[tail-1]])) tail--; q[++tail] = i; } printf("%lld\n",f ); return 0; }
View Code
相关文章推荐
- 概率论--第一章
- 敏捷开发之Scrum扫盲篇
- 华为机试——合并表记录
- Twitter search API
- 网易接口
- Reachability
- C++之路进阶——LCA(商务旅行)
- MySql的锁问题和事物
- cf#338-B - Longtail Hedgehog-dag_dp
- UNIX(2) euid, suid, uid
- 华为机试——质数因子
- LeetCode OJ - Longest Common Prefix
- 测试工具的选择和使用
- 因为我们是OIER
- 燕十八---HTML标签学习
- 对geojson数据的加载
- 机器学习之逻辑回归基础
- 华为机试——进制转换
- world章节分类
- 它们,不能是虚函数!!!