#include<bits/stdc++.h>
using namespace std;
#define int long long
#define pb push_back
#define mp make_pair
#define pii pair<int,int>
#define fi first
#define se second
const int nn=2e5+5,mm=nn<<2;
int n,q,a[nn],st1[nn],st2[nn],tp1,tp2,ans[nn];
vector<pii> e[nn];
struct sgt{
int l,r,mn,cnt,add,tg,sum;
};
sgt tree[mm];
inline void pushup(int o){
tree[o].mn=min(tree[o<<1].mn,tree[o<<1|1].mn);
tree[o].cnt=tree[o<<1].cnt*(tree[o<<1].mn==tree[o].mn)+tree[o<<1|1].cnt*(tree[o<<1|1].mn==tree[o].mn);
tree[o].sum=tree[o<<1].sum+tree[o<<1|1].sum;
}
inline void build(int l,int r,int o){
tree[o].l=l,tree[o].r=r;
if(l==r){
tree[o].mn=l,tree[o].cnt=1;
return ;
}
int mid=(l+r)>>1;
build(l,mid,o<<1),build(mid+1,r,o<<1|1);
pushup(o);
}
inline void tagadd(int o,int v){tree[o].mn+=v;tree[o].add+=v;}
inline void tagtg(int o,int v){tree[o].sum+=v*tree[o].cnt;tree[o].tg+=v;}
inline void pushdown(int o){
tagadd(o<<1,tree[o].add),tagadd(o<<1|1,tree[o].add);
if(tree[o].mn==tree[o<<1].mn) tagtg(o<<1,tree[o].tg);
if(tree[o].mn==tree[o<<1|1].mn) tagtg(o<<1|1,tree[o].tg);
tree[o].tg=tree[o].add=0;
}
inline void update(int l,int r,int z,int o){
if(tree[o].l==l&&tree[o].r==r){
tagadd(o,z);
return ;
}
pushdown(o);
int mid=(tree[o].l+tree[o].r)>>1;
if(l<=mid) update(l,min(mid,r),z,o<<1);
if(r>=mid+1) update(max(l,mid+1),r,z,o<<1|1);
pushup(o);
}
inline int query(int l,int r,int o){
if(tree[o].l==l&&tree[o].r==r) return tree[o].sum;
int mid=(tree[o].l+tree[o].r)>>1,ans=0;
pushdown(o);
if(l<=mid) ans+=query(l,min(mid,r),o<<1);
if(r>=mid+1) ans+=query(max(l,mid+1),r,o<<1|1);
return ans;
}
signed main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
cin>>q;
for(int i=1;i<=q;i++){
int l,r;
cin>>l>>r;
e[r].pb(mp(l,i));
}
build(1,n,1);
for(int i=1;i<=n;i++){
while(tp1&&a[st1[tp1]]>a[i]){
update(st1[tp1-1]+1,st1[tp1],a[st1[tp1]]-a[i],1);
tp1--;
}
while(tp2&&a[st2[tp2]]<a[i]){
update(st2[tp2-1]+1,st2[tp2],a[i]-a[st2[tp2]],1);
tp2--;
}
st1[++tp1]=i,st2[++tp2]=i;
tagadd(1,-1),tagtg(1,1);
for(auto s:e[i]) ans[s.se]=query(s.fi,i,1);
}
for(int i=1;i<=q;i++) cout<<ans[i]<<endl;
return 0;
}