Submission #445150

#TimeUsernameProblemLanguageResultExecution timeMemory
445150keta_tsimakuridzeBuilding Bridges (CEOI17_building)C++14
100 / 100
134 ms67488 KiB
#include<bits/stdc++.h> #define f first #define s second #define ll long long #define int long long using namespace std; const int N=2e6+5,mod=1e9+7; int t,a[N],b[N],n; pair<ll,ll>tree[4*N]; ll f(ll k,ll x,ll b){ return k*x+b; } void insert(int u,int l,int r,ll k,ll b) { if(l==r) { if(f(tree[u].f,l,tree[u].s) > f(k,l,b)) { tree[u] = {k,b}; } return; } int mid = (l+r)/2; if(k < tree[u].f) { swap(k,tree[u].f); swap(b,tree[u].s); } if(f(k,mid,b) >= f(tree[u].f,mid,tree[u].s)) { insert(2*u,l,mid,k,b); } else { insert(2*u+1,mid+1,r,tree[u].f,tree[u].s); tree[u] = {k,b}; } } ll getans(int u,int ind,int l,int r) { if(l==r) { return f(tree[u].f,ind,tree[u].s); } int mid = (l+r)/2; if(ind <= mid) return min(f(tree[u].f,ind,tree[u].s),getans(2*u,ind,l,mid)); return min(f(tree[u].f,ind,tree[u].s),getans(2*u+1,ind,mid+1,r)); } void build(int u,int l,int r) { tree[u] = {1e10,1e17}; if(l==r) return; int mid = (l+r)/2; build(2*u,l,mid); build(2*u+1,mid+1,r); } main(){ cin>>n; int mx = 0; for(int i=1;i<=n;i++){ cin>>a[i]; mx = max(mx,a[i]); } mx *= 2; for(int i=1;i<=n;i++){ cin>>b[i]; b[i] += b[i-1]; } build(1,1,mx); insert(1,1,mx,-2*a[1],-b[1]+a[1]*a[1]); for(int i=2;i<=n;i++) { ll ans = getans(1,a[i],1,mx) + a[i]*a[i] + b[i-1]; insert(1,1,mx,-2*a[i],ans-b[i]+a[i]*a[i]); if(i==n) cout<<ans; } }

Compilation message (stderr)

building.cpp:48:2: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   48 |  main(){
      |  ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...