# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
47847 | 2018-05-08T08:04:33 Z | Extazy | Building Bridges (CEOI17_building) | C++17 | 3000 ms | 8516 KB |
#include <bits/stdc++.h> #define endl '\n' using namespace std; const int N = 100007; struct dynamic_convex_hull_trick { struct line { long long a,b; line(){} line(long long x, long long y): a(x), b(y) {} bool operator <(const line &x) const { return a==x.a ? b<x.b : a<x.a; } }; set < line > s; long long eval(line l, long long x) { return l.a*x+l.b; } double cross_x(line l1, line l2) { return (double)(l2.b-l1.b)/(double)(l1.a-l2.a); } void add_line(line l) { if(s.find(l)!=s.end()) return; set < line >::iterator it=s.insert(l).first,it1,it2; if(it!=s.begin() && it!=s.end()) { it1=prev(it); it2=next(it); if(it2!=s.end()) { if(cross_x(*it2,*it1)>=cross_x(*it,*it1)) { s.erase(it); return; } } } while(it!=s.begin()) { it1=prev(it); if(it1==s.begin()) break; it2=prev(it1); if(cross_x(*it2,*it)>=cross_x(*it2,*it1)) { s.erase(it1); it=s.find(l); } else { break; } } while(it!=s.end()) { it1=next(it); if(it1==s.end()) break; it2=next(it1); if(it2==s.end()) break; if(cross_x(*it2,*it)>=cross_x(*it1,*it)) { s.erase(it1); it=s.find(l); } else { break; } } } long long get(long long x) { long long ans=numeric_limits < long long >::max(); for(set < line >::iterator it=s.begin();it!=s.end();it++) { ans=min(ans,eval(*it,x)); } return ans; } }; int n,h[N],w[N]; long long s[N]; dynamic_convex_hull_trick cht; long long dp[N]; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int i; scanf("%d", &n); for(i=1;i<=n;i++) { scanf("%d", &h[i]); } for(i=1;i<=n;i++) { scanf("%d", &w[i]); s[i]=s[i-1]+w[i]; } dp[n]=0; for(i=n-1;i>=1;i--) { cht.add_line(dynamic_convex_hull_trick::line(-2ll*h[i+1],s[i]+h[i+1]*1ll*h[i+1]+dp[i+1])); dp[i]=h[i]*1ll*h[i]-s[i]+cht.get(h[i]); } printf("%lld\n", dp[1]); return 0; }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 2 ms | 376 KB | Output is correct |
2 | Correct | 2 ms | 488 KB | Output is correct |
3 | Correct | 2 ms | 488 KB | Output is correct |
4 | Correct | 2 ms | 488 KB | Output is correct |
5 | Correct | 2 ms | 488 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 842 ms | 3956 KB | Output is correct |
2 | Correct | 830 ms | 5008 KB | Output is correct |
3 | Correct | 832 ms | 6048 KB | Output is correct |
4 | Correct | 237 ms | 6824 KB | Output is correct |
5 | Execution timed out | 3058 ms | 8516 KB | Time limit exceeded |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 2 ms | 376 KB | Output is correct |
2 | Correct | 2 ms | 488 KB | Output is correct |
3 | Correct | 2 ms | 488 KB | Output is correct |
4 | Correct | 2 ms | 488 KB | Output is correct |
5 | Correct | 2 ms | 488 KB | Output is correct |
6 | Correct | 842 ms | 3956 KB | Output is correct |
7 | Correct | 830 ms | 5008 KB | Output is correct |
8 | Correct | 832 ms | 6048 KB | Output is correct |
9 | Correct | 237 ms | 6824 KB | Output is correct |
10 | Execution timed out | 3058 ms | 8516 KB | Time limit exceeded |