#include <bits/stdc++.h>

using namespace std;

struct Query {
    int l, r, val;
    int ans;
};

const int maxn = 30010;
const int maxq = 200010;
int n, q;
pair<int, int> a[maxn];
Query qr[maxq];

vector<int> val_it[maxn * 2];
vector<Query*> qr_it[maxn * 2];

int main() {
#ifdef LOCAL
    freopen("main.inp", "r", stdin);
    freopen("main.out", "w", stdout);
#endif
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    cin >> n;
    for (int i = 0; i < n; ++i) {
        cin >> a[i].first;
        a[i].second = i;
    }
    
    cin >> q;
    vector<Query*> temp_qr;
    for (int i = 0; i < q; ++i) {
        cin >> qr[i].l >> qr[i].r >> qr[i].val;
        --qr[i].l;
        qr[i].ans = 0;
        temp_qr.push_back(qr + i);
    }
    
    sort(a, a + n, greater<>());
    sort(temp_qr.begin(), temp_qr.end(), [](const Query* u, const Query* v) { return u->val > v->val; });
    
    for (int i = 0; i < n; ++i) {
        for (int p = a[i].second + n; p > 0; p >>= 1)
            val_it[p].push_back(a[i].first);
    }
    
    for (auto cur_qr: temp_qr) {
        for (int l = cur_qr->l + n, r = cur_qr->r + n; l < r; l >>= 1, r >>= 1) {
            if (l & 1) qr_it[l++].push_back(cur_qr);
            if (r & 1) qr_it[--r].push_back(cur_qr);
        }
    }
    
    for (int root = 1; root < 2 * n; ++root) {
        auto& vi = val_it[root];
        auto& qi = qr_it[root];
        if (vi.empty() or qi.empty()) continue;
        int ptr_v = 0;
        for (auto cur_qr: qi) {
            while (ptr_v < (int)vi.size() and vi[ptr_v] > cur_qr->val) ++ ptr_v;
            cur_qr->ans += ptr_v;
        }
    }
    
    for (int i = 0; i < q; ++i) cout << qr[i].ans << '\n';
    
    return 0;
}
