[BZOJ1911][Apio2010]特别行动队
来源:互联网 发布:二维数组去重js 编辑:程序博客网 时间:2024/04/28 09:40
原题地址
斜率优化…
#include <cstdio>#include <queue>using namespace std;typedef long long ll;const ll N=1000010;ll n,a,b,c;ll x[N],s[N],f[N];struct Vec{ ll x,y; Vec() {} Vec(ll x,ll y):x(x),y(y) {} friend Vec operator-(Vec a,Vec b){ return Vec(a.x-b.x,a.y-b.y); } friend ll operator*(Vec a,Vec b){ return a.x*b.y-a.y*b.x; }};deque<Vec> Q;int main(){ scanf("%lld%lld%lld%lld",&n,&a,&b,&c); for(ll i=1;i<=n;i++) scanf("%lld",&x[i]); for(ll i=1;i<=n;i++) s[i]=s[i-1]+x[i]; for(ll i=1;i<=n;i++){ ll A=-s[i]; Vec tmp=Vec(((a*s[i-1])<<1),f[i-1]+a*s[i-1]*s[i-1]-b*s[i-1]); while(Q.size()>1){ Vec a,b; a=Q.front();Q.pop_front();b=Q.front(); if((tmp-a)*(a-b)<0){ Q.push_front(a); break; } } Q.push_front(tmp); while(Q.size()>1){ Vec a,b; a=Q.back();Q.pop_back();b=Q.back(); if(A*a.x+a.y>A*b.x+b.y){ Q.push_back(a); f[i]=A*a.x+a.y; break; } f[i]=A*b.x+b.y; } f[i]+=a*s[i]*s[i]+b*s[i]+c; } printf("%lld\n",f[n]); return 0;}
0 0
- [Bzoj1911][Apio2010]特别行动队
- bzoj1911 [Apio2010]特别行动队
- APIO2010特别行动队bzoj1911
- [BZOJ1911][Apio2010]特别行动队
- [BZOJ1911] [Apio2010]特别行动队
- BZOJ1911: [Apio2010]特别行动队
- bzoj1911【APIO2010】特别行动队
- BZOJ1911 Apio2010 特别行动队
- bzoj1911[Apio2010] 特别行动队
- 【APIO2010】bzoj1911 特别行动队
- bzoj1911: [Apio2010]特别行动队
- bzoj1911: [Apio2010]特别行动队
- bzoj1911 [Apio2010]特别行动队
- 【BZOJ1911】【APIO2010】特别行动队
- BZOJ1911: [Apio2010]特别行动队
- 【bzoj1911】【APIO2010】【特别行动队】【斜率优化】
- 【bzoj1911】[Apio2010]特别行动队commando
- BZOJ1911 [Apio2010]特别行动队 斜率优化
- java封装
- 内存管理之autorelease
- Spring实战——面向切面的Spring
- iOS开发笔记-静态库.a
- 机器视觉开源处理库汇总
- [BZOJ1911][Apio2010]特别行动队
- 第一个Vertx应用程序
- 学习《android 开发艺术探索》记录
- 深入浅出JMS(四)--Spring和ActiveMQ整合的完整实例
- 0926-note
- spring MVC配置详解
- HDU 2717 Catch That Cow(哎!居然没想到用bfs)
- UGUI 新手指引
- mysql命令