結果
問題 | No.703 ゴミ拾い Easy |
ユーザー | skylee |
提出日時 | 2018-07-23 16:34:53 |
言語 | C++11 (gcc 11.4.0) |
結果 |
AC
|
実行時間 | 51 ms / 1,500 ms |
コード長 | 1,919 bytes |
コンパイル時間 | 510 ms |
コンパイル使用メモリ | 42,888 KB |
実行使用メモリ | 13,048 KB |
最終ジャッジ日時 | 2024-06-10 18:33:22 |
合計ジャッジ時間 | 3,783 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 4 ms
10,316 KB |
testcase_01 | AC | 3 ms
7,820 KB |
testcase_02 | AC | 3 ms
10,080 KB |
testcase_03 | AC | 2 ms
8,012 KB |
testcase_04 | AC | 3 ms
10,204 KB |
testcase_05 | AC | 2 ms
10,276 KB |
testcase_06 | AC | 2 ms
10,560 KB |
testcase_07 | AC | 4 ms
7,820 KB |
testcase_08 | AC | 3 ms
7,676 KB |
testcase_09 | AC | 4 ms
10,468 KB |
testcase_10 | AC | 4 ms
10,600 KB |
testcase_11 | AC | 3 ms
10,336 KB |
testcase_12 | AC | 4 ms
10,152 KB |
testcase_13 | AC | 4 ms
9,544 KB |
testcase_14 | AC | 3 ms
8,032 KB |
testcase_15 | AC | 4 ms
10,220 KB |
testcase_16 | AC | 4 ms
9,484 KB |
testcase_17 | AC | 4 ms
10,496 KB |
testcase_18 | AC | 3 ms
7,692 KB |
testcase_19 | AC | 4 ms
10,092 KB |
testcase_20 | AC | 4 ms
10,572 KB |
testcase_21 | AC | 4 ms
10,912 KB |
testcase_22 | AC | 4 ms
10,176 KB |
testcase_23 | AC | 4 ms
9,688 KB |
testcase_24 | AC | 50 ms
12,372 KB |
testcase_25 | AC | 48 ms
11,860 KB |
testcase_26 | AC | 50 ms
11,436 KB |
testcase_27 | AC | 51 ms
12,748 KB |
testcase_28 | AC | 50 ms
12,496 KB |
testcase_29 | AC | 50 ms
11,488 KB |
testcase_30 | AC | 49 ms
11,788 KB |
testcase_31 | AC | 51 ms
13,048 KB |
testcase_32 | AC | 50 ms
11,980 KB |
testcase_33 | AC | 47 ms
11,964 KB |
testcase_34 | AC | 42 ms
12,832 KB |
testcase_35 | AC | 43 ms
12,136 KB |
testcase_36 | AC | 40 ms
11,576 KB |
testcase_37 | AC | 42 ms
11,728 KB |
testcase_38 | AC | 40 ms
11,968 KB |
testcase_39 | AC | 41 ms
11,432 KB |
testcase_40 | AC | 42 ms
12,432 KB |
testcase_41 | AC | 42 ms
12,280 KB |
testcase_42 | AC | 41 ms
11,976 KB |
testcase_43 | AC | 42 ms
12,200 KB |
testcase_44 | AC | 4 ms
11,208 KB |
testcase_45 | AC | 4 ms
10,880 KB |
testcase_46 | AC | 46 ms
12,572 KB |
testcase_47 | AC | 46 ms
12,388 KB |
testcase_48 | AC | 4 ms
7,852 KB |
testcase_49 | AC | 3 ms
8,020 KB |
ソースコード
#include<cstdio> #include<cctype> #include<climits> #include<algorithm> inline int getint() { register char ch; while(!isdigit(ch=getchar())); register int x=ch^'0'; while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0'); return x; } using int64=long long; const int N=3e5+1,LIM=1e5; int a[N],x[N],y[N]; int64 f[N]; using Line=std::pair<int64,int64>; class SegmentTree { #define _left <<1 #define _right <<1|1 #define mid ((b+e)>>1) private: Line node[LIM<<2]; int64 calc(const Line &l,const int &x) const { return l.first*x+l.second; } public: void build(const int &p,const int &b,const int &e) { node[p]={0,LLONG_MAX}; if(b==e) return; build(p _left,b,mid); build(p _right,mid+1,e); } void insert(const int &p,const int &b,const int &e,Line l1) { if(node[p].second==LLONG_MAX) { node[p]=l1; return; } Line l2=node[p]; if(calc(l2,b)>=calc(l1,b)) std::swap(l1,l2); if(calc(l1,e)>=calc(l2,e)) { node[p]=l2; return; } if(b==e) return; const double c=1.*(l2.second-l1.second)/(l1.first-l2.first); if(c<=mid) { node[p]=l1; insert(p _left,b,mid,l2); } else { node[p]=l2; insert(p _right,mid+1,e,l1); } } int64 query(const int &p,const int &b,const int &e,const int &x) const { int64 ret=calc(node[p],x); if(b==e) return ret; if(x<=mid) ret=std::min(ret,query(p _left,b,mid,x)); if(x>mid) ret=std::min(ret,query(p _right,mid+1,e,x)); return ret; } #undef _left #undef _right #undef mid }; SegmentTree t; int main() { const int n=getint(); for(register int i=1;i<=n;i++) a[i]=getint(); for(register int i=1;i<=n;i++) x[i]=getint(); for(register int i=1;i<=n;i++) y[i]=getint(); t.build(1,1,LIM); for(register int i=1;i<=n;i++) { t.insert(1,1,LIM,(Line){-2*x[i],(int64)x[i]*x[i]+(int64)y[i]*y[i]+f[i-1]}); f[i]=t.query(1,1,LIM,a[i])+(int64)a[i]*a[i]; } printf("%lld\n",f[n]); return 0; }