結果
問題 | No.705 ゴミ拾い Hard |
ユーザー |
![]() |
提出日時 | 2018-09-18 01:37:05 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 282 ms / 1,500 ms |
コード長 | 2,157 bytes |
コンパイル時間 | 800 ms |
コンパイル使用メモリ | 89,648 KB |
実行使用メモリ | 17,024 KB |
最終ジャッジ日時 | 2024-07-18 07:54:01 |
合計ジャッジ時間 | 7,854 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 40 |
ソースコード
#include<iostream>#include<string>#include<algorithm>#include<vector>#include<iomanip>#include<math.h>#include<complex>#include<queue>#include<deque>#include<stack>#include<map>#include<set>#include<bitset>using namespace std;#define REP(i,m,n) for(int i=(int)m ; i < (int) n ; ++i )#define rep(i,n) REP(i,0,n)typedef long long ll;typedef pair<int,int> pint;typedef pair<ll,int> pli;const int inf=1e9+7;const ll longinf=1LL<<60 ;const ll mod=1e9+7 ;template<typename T,const T id>struct ConvexHullTrick{struct Line{T a,b;Line(T a=0,T b=0):a(a),b(b){}T get(T x){return -abs(x-a)*(x-a)*(x-a)-b;}};struct Node{Line l;Node *lhs,*rhs;Node(Line l):l(l),lhs(nullptr),rhs(nullptr){}};const T mi,ma;Node* root=nullptr;ConvexHullTrick(T mi=0,T ma=inf):mi(mi),ma(ma){}Node* insert(Node* p,int lb,int ub,Line& l){if(!p)return new Node(l);if(p->l.get(lb)>=l.get(lb)&&p->l.get(ub)>=l.get(ub))return p;if(p->l.get(lb)<=l.get(lb)&&p->l.get(ub)<=l.get(ub)){p->l = l;return p;}int mid=(lb+ub)/2;if(p->l.get(mid)<l.get(mid))swap(p->l , l);if(p->l.get(lb)<=l.get(lb)){p->lhs=insert(p->lhs,lb,mid,l);}else {p->rhs=insert(p->rhs,mid+1,ub,l);}return p;}void insert(T a,T b){Line l(a,b);root=insert(root,mi,ma,l);}T query(Node* p,int lb,int ub,int t){if(!p)return id;if(lb==ub)return p->l.get(t);int mid=(lb+ub)/2;if(t<=mid)return max(p->l.get(t),query(p->lhs,lb,mid,t));else return max(p->l.get(t),query(p->rhs,mid+1,ub,t));}T query(T x){return query(root,mi,ma,x);}};int main(){int n;cin>>n;ll a[n],x[n],y[n];rep(i,n)cin>>a[i];rep(i,n)cin>>x[i];rep(i,n)cin>>y[i];ConvexHullTrick<ll, -longinf> cht(0,101010);ll dp[n+1];dp[0]=0;rep(i,n){cht.insert(x[i],dp[i]+y[i]*y[i]*y[i]);dp[i+1]=-cht.query(a[i]);}cout<<dp[n]<<endl;}