#include <bits/stdc++.h>
using namespace std;
#define int long long
#define ii pair<int,int>
#define fir first
#define sec second
#define pb push_back
const int maxn=2e5+3;
vector<int>adj[maxn+4];
int n;
int a[maxn+2],l[maxn+2],r[maxn+2];
int dp[maxn+2],bin[maxn+2][20];
vector<ii>isi[maxn+2];
int anc(int u,int mx){
for(int q=19;q>=0;q--){
if(a[bin[u][q]]<mx){
u=bin[u][q];
}
}
return u;
}
int cnt,in[maxn+2],out[maxn+2];
int st[4*maxn+2];
void update(int idx,int l,int r,int posl,int posr,int val){
if(l>posr || r<posl)return;
if(l>=posl && r<=posr){
st[idx]+=val; return;
}
int mid=(l+r)/2;
update(2*idx,l,mid,posl,posr,val); update(2*idx+1,mid+1,r,posl,posr,val);
}
int query(int idx,int l,int r,int pos){
if(l>pos || r<pos)return 0;
if(l==r){
return st[idx];
}
int mid=(l+r)/2;
return query(2*idx,l,mid,pos)+query(2*idx+1,mid+1,r,pos)+st[idx];
}
void dfs(int cur){
//cout<<cur<<endl;
in[cur]=++cnt;
for(auto x : adj[cur]){
dfs(x);
dp[cur]+=dp[x];
}
out[cur]=cnt;
update(1,1,n,in[cur],out[cur],dp[cur]);
for(auto [id ,val] : isi[cur]){
dp[cur]=max(dp[cur],val+query(1,1,n,in[id]));
}
update(1,1,n,in[cur],out[cur],-dp[cur]);
}
signed main(){
ios_base::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>n;
a[0]=a[n+1]=1e15;
for(int q=1;q<=n;q++){
cin>>a[q];
}
stack<int>st; st.push(0);
for(int q=1;q<=n;q++){
while(st.size() && a[st.top()]<a[q]){
st.pop();
}
l[q]=st.top();
st.push(q);
}
while(st.size())st.pop();
st.push(n+1);
for(int q=n;q>=1;q--){
while(st.size() && a[st.top()]<=a[q]){
st.pop();
}
r[q]=st.top();
st.push(q);
}
for(int q=1;q<=n;q++){
if(r[q]==n+1 || a[l[q]]<a[r[q]]){
adj[l[q]].push_back(q);
bin[q][0]=l[q];
}
else{
adj[r[q]].push_back(q);
bin[q][0]=r[q];
}
}
for(int q=1;q<=19;q++){
for(int w=1;w<=n;w++){
bin[w][q]=bin[bin[w][q-1]][q-1];
}
}
int brp; cin>>brp;
int ans=0;
while(brp--){
int u,h,c;
cin>>u>>h>>c;
isi[anc(u,h)].pb({u,c});
ans+=c;
}
dfs(0);
cout<<ans-dp[0]<<endl;
}