#include<bits/stdc++.h>
using namespace std;
#define F first
#define S second
#define ll long long
#define sz(s) (int)s.size()
#define in insert
#define pii pair<int, int>
#define pb push_back
#define mp make_pair
#define int ll

const int MAX=3e5+10;
const int inf=1e18;

int dp[MAX];
int n,a[MAX],c[MAX];
int l[MAX];
int t[4*MAX];

void update(int v,int tl,int tr,int pos,int x){
    if(tl==tr){
        t[v]=x;
        return;
    }
    int tm=(tl+tr)/2;
    if(pos<=tm)update(2*v,tl,tm,pos,x);
    else update(2*v+1,tm+1,tr,pos,x);
    t[v]=min(t[2*v],t[2*v+1]);
}

int get(int v,int tl,int tr,int l,int r){
    if(l>r||tl>r||l>tr)return inf;
    if(l<=tl&&tr<=r)return t[v];
    int tm=(tl+tr)/2;
    return min(get(2*v,tl,tm,l,r),get(2*v+1,tm+1,tr,l,r));
}

signed main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }
    for(int i=1;i<=n;i++)cin>>c[i];
    for(int i=1;i<=4*n;i++)t[i]=inf;
    l[1]=1;
    stack<int> st;
    st.push(1);
    for(int i=2;i<=n;i++){
        l[i]=i;
        while(!st.empty()&&a[i]>=a[st.top()]){
            l[i]=l[st.top()];
            st.pop();
        }
        st.push(i);
    }
    for(int i=1;i<=n;i++){
        dp[i]=dp[i]=inf;
    }
    dp[1]=c[1];
    while(!st.empty())st.pop();
    multiset<int> q;
    q.in(dp[0]+c[1]);
    update(1,1,n,1,dp[0]);
    st.push(1);
    // cout<<dp[1][0]<<" "<<dp[1][1]<<"\n";
    for(int i=2;i<=n;i++){
        dp[i]=get(1,1,n,l[i],i)+c[i];
        while(!st.empty()&&a[i]>=a[st.top()]){
            q.erase(q.find(dp[st.top()-1]+c[st.top()]));
            st.pop();
        }
        st.push(i);
        q.in(dp[i-1]+c[i]);
        dp[i]=min(dp[i],*q.begin());
        update(1,1,n,i,dp[i-1]);
        // cout<<dp[i][0]<<" "<<dp[i][1]<<"\n";
    }
    cout<<dp[n]<<"\n";
}