#include<bits/stdc++.h>
using namespace std;
const long long mod=1000000007;
const long long inf=mod*mod;
const long long d2=500000004;
const double EPS=1e-6;
const double PI=acos(-1.0);
int ABS(int a){return max(a,-a);}
long long ABS(long long a){return max(a,-a);}
int p[310000];
int sum[310000];
vector<pair<int,int> >g[310000];
int dp[310000];
int segtree[524288];
int query(int a,int b,int c,int d,int e){
	if(d<a||b<c)return -1;
	if(c<=a&&b<=d)return segtree[e];
	int L=query(a,(a+b)/2,c,d,e*2);
	int R=query((a+b)/2+1,b,c,d,e*2+1);
	if(L==-1)return R;
	if(R==-1)return L;
	if(dp[L]+(R-L)-(sum[R]-sum[L])<dp[R])return L;
	else return R;
}
void update(int a){
	a+=262144;
	a/=2;
	while(a){
		int L=segtree[a*2];
		int R=segtree[a*2+1];
		if(dp[L]+(R-L)-(sum[R]-sum[L])<dp[R])segtree[a]=L;
		else segtree[a]=R;
		a/=2;
	}
}
int main(){
	int a;scanf("%d",&a);
	for(int i=0;i<a;i++)scanf("%d",p+i);
	for(int i=0;i<290000;i++)sum[i+1]=sum[i]+p[i];
	int b;scanf("%d",&b);
	for(int i=0;i<262144;i++)segtree[i+262144]=i;
	for(int i=0;i<=290000;i++)dp[i]=mod;
	dp[0]=0;
	for(int i=0;i<262144;i++)update(i);

	for(int i=0;i<b;i++){
		int l,r;scanf("%d%d",&l,&r);l--;
		g[l].push_back(make_pair(r,(r-l)-(sum[r]-sum[l])));
	}
	for(int i=0;i<a;i++){
		for(int j=0;j<g[i].size();j++){
			int at=query(0,262143,i,g[i][j].first,1);
			dp[g[i][j].first]=dp[at]+(g[i][j].first-at)-(sum[g[i][j].first]-sum[at]);
			update(g[i][j].first);
		}
		dp[i+1]=min(dp[i+1],dp[i]+p[i]);
		update(i+1);
		dp[i]=mod;
		update(i);
	}
	printf("%d\n",dp[a]);
}