#include<bits/stdc++.h>
using namespace std;
void getmin(int &x,int y){x=min(x,y);}
int n,q,l,r;
int b[200100],dat[524288],mx=262144,dp[200100],w[200100],pre[200100];
vector<int> opr[200100];
void update(int l,int r,int delta){
	l+=mx;r+=mx;
	while(l<=r){
		getmin(dat[l],delta);
		getmin(dat[r],delta);
		l=(l+1)>>1;
		r=(r-1)>>1;
	}
}
int get(int p){
	p+=mx;
	int ret=1e9;
	while(p){
		getmin(ret,dat[p]);
		p>>=1;
	}
	return ret;
}
int main(){
	#ifdef FILIN
		#ifndef LOCAL
			freopen(FILIN,"r",stdin);
			freopen(FILOUT,"w",stdout);
		#endif
	#endif
	ios::sync_with_stdio(0);
	cin.tie(NULL);
	cout.tie(NULL);
	for(int i=1;i<mx*2;i++)
		dat[i]=1e9;
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>w[i];
		pre[i]=pre[i-1]+(1-w[i]);
	}
	cin>>q;
	for(int i=1;i<=q;i++){
		cin>>l>>r;
		opr[r].push_back(l); 
	}
	for(int i=1;i<=n;i++){
		update(i-1,i-1,dp[i-1]-pre[i-1]);
		dp[i]=dp[i-1]+w[i];
		for(int j:opr[i]){
			update(j,i,get(j-1));
		}
		getmin(dp[i],get(i)+pre[i]);
	}
	cout<<dp[n]<<endl;
	return 0;
}
