单调栈瞎搞一下就好了
//#include<bits/stdc++.h>
#include<stdio.h>
#include<cstring>
#include<cmath>
#include<iostream>
using namespace std;
const int MAXN=100100;
long long a[MAXN],bef[MAXN],aft[MAXN],ans[MAXN],stk[MAXN];
int main()
{
long long n,i,k,cnt,q;
while(~scanf("%lld",&n))
{
for(i=1;i<=n;i++)
scanf("%lld",&a[i]);
cnt=0;
for(i=1;i<=n;i++)
{
while(cnt&&a[stk[cnt-1]]<=a[i])
cnt--;
if(!cnt)
bef[i]=1;
else
bef[i]=stk[cnt-1]+1;
stk[cnt++]=i;
}
cnt=0;
for(i=n;i>=1;i--)
{
while(cnt&&a[stk[cnt-1]]<a[i])
cnt--;
if(!cnt)
aft[i]=n;
else
aft[i]=stk[cnt-1]-1;
stk[cnt++]=i;
}
memset(ans,0,sizeof(ans));
for(i=1;i<=n;i++)
ans[a[i]]+=(i-bef[i]+1)*(aft[i]-i+1);
for(i=100000;i>=1;i--)
ans[i]+=ans[i+1];
scanf("%lld",&q);
while(q--)
{
scanf("%lld",&k);
printf("%lld\n",ans[k]);
}
}
}