#include <bits/stdc++.h>
using namespace std;
const int MaxN = 200003,INF=0x7f7f7f7f;
int n,b[MaxN],pre[MaxN],q;
vector<int> e[MaxN];

struct Segtree{
    int mn[MaxN*4];
    void modify(int p,int x,int l,int r,int ll,int rr) {
        if (ll<=l && r<=rr) {
            mn[p]=min(mn[p],x);
            return;
        }
        int mid=(l+r)/2;
        if (ll<=mid) modify(p*2,x,l,mid,ll,rr);
        if (rr>mid) modify(p*2+1,x,mid+1,r,ll,rr);
    }
    void modify(int l,int r,int x) {modify(1,x,0,n,l,r);}
    int query(int p,int l,int r,int ll,int rr) {
        int ret=mn[p];
        if (ll<=l && r<=rr) return ret;
        int mid=(l+r)/2;
        if (ll<=mid) ret=min(ret,query(p*2,l,mid,ll,rr));
        if (rr>mid) ret=min(ret,query(p*2+1,mid+1,r,ll,rr));
        return ret;
    }
    int query(int l,int r) {return query(1,0,n,l,r);}
    int query(int x) {return query(1,0,n,x,x);}
    void clear() {memset(mn,0x7f,sizeof mn);}
}sg;

int dp[MaxN];

int main() {
    scanf("%d",&n);
    for (int i=1;i<=n;++i) scanf("%d",b+i),pre[i]=pre[i-1]+1-b[i];
    scanf("%d",&q);
    for (int i=1;i<=q;++i) {
        int l,r;
        scanf("%d%d",&l,&r);
        e[r].push_back(l);
    }
    sg.clear();
    for (int i=1;i<=n;++i) {
        sg.modify(i-1,i-1,dp[i-1]-pre[i-1]);
        for (int j:e[i]) sg.modify(j,i,sg.query(j-1));
        dp[i]=min(dp[i-1]+b[i],sg.query(i)+pre[i]);
    }
    printf("%d\n",dp[n]);
    return 0;
}