#include <bits/stdc++.h>
using namespace std;
#define ll long long int
#define pii pair<int, int>
#define REP(i, a, b) for (int i = a; i <= b; i++)
#define RREP(i, a, b) for (int i = a; i >= b; i--)
#define endl "\n"
#define all(x) (x).begin(), (x).end()
#define pi 3.141592653589793238
#define maxN 30001
#define INF 1000000000
#define mod 1000000007
#define printd(x) cout << fixed << setprecision(10) << x
// int dx[] = {-2, -1, 1, 2, 2, 1, -1, -2};
// int dy[] = {1, 2, 2, 1, -1, -2, -2, -1};
// int dx[] = {-1, 0, 1, 0, 1, -1, 1, -1};
// int dy[] = {0, -1, 0, 1, -1, -1, 1, 1};
int n, q;
int arr[maxN];
int rev[maxN];
map<int, int> mp;
int timer = 0;
int bs(int k)
{
// index where arr[index] <= k
int start = 1, end = timer;
while (start <= end)
{
int mid = (start + end) / 2;
if (rev[mid] <= k && (mid == end || rev[mid + 1] > k))
return mid;
else if (rev[mid] <= k)
start = mid + 1;
else
end = mid - 1;
}
return 0; // then answer = size of range
}
template <class T>
class PersistentSegmentTree
{
int n;
vector<T> segTree;
vector<int> left, right;
vector<int> roots;
int index;
public:
PersistentSegmentTree() {}
int build(int ss, int se)
{
int node = ++index;
if (ss == se)
{
segTree[node] = 0;
return node;
}
else
{
int mid = (ss + se) / 2;
left[node] = build(ss, mid);
right[node] = build(mid + 1, se);
segTree[node] = 0;
return node;
}
}
PersistentSegmentTree(int N)
{
n = N;
segTree.resize(N * 21);
left.resize(N * 21);
right.resize(N * 21);
index = 0;
roots.push_back(build(1, n));
}
void resize(int N)
{
n = N;
segTree.resize(N * 21);
left.resize(N * 21);
right.resize(N * 21);
index = 0;
roots.push_back(build(1, n));
}
int _update_(int prevNode, int ss, int se, int qi, T val)
{
int node = ++index;
if (ss == se)
{
segTree[node] = segTree[prevNode] + val;
return node;
}
int mid = (ss + se) / 2;
if (qi <= mid)
{
right[node] = right[prevNode];
left[node] = _update_(left[prevNode], ss, mid, qi, val);
}
else
{
left[node] = left[prevNode];
right[node] = _update_(right[prevNode], mid + 1, se, qi, val);
}
segTree[node] = segTree[left[node]] + segTree[right[node]];
return node;
}
void update(int index, T val)
{
roots.push_back(_update_(roots.back(), 1, n, index, val));
}
T _query_(int nodeA, int nodeB, int ss, int se, int qs, int qe)
{
if (qs > se || qe < ss)
return 0;
if (qs <= ss && qe >= se)
return segTree[nodeA] - segTree[nodeB];
int mid = (ss + se) / 2;
return _query_(left[nodeA], left[nodeB], ss, mid, qs, qe) + _query_(right[nodeA], right[nodeB], mid + 1, se, qs, qe);
}
T _query_(int nodeA, int nodeB, int ss, int se, int k)
{
if (ss == se)
return ss;
int diff = segTree[left[nodeA]] - segTree[left[nodeB]];
int mid = (ss + se) / 2;
if (diff >= k)
return _query_(left[nodeA], left[nodeB], ss, mid, k);
else
return _query_(right[nodeA], right[nodeB], mid + 1, se, k - diff);
}
T query(int ul, int ur, int qs, int qe = -1)
{
if (qe == -1)
return _query_(roots[ur], roots[ul - 1], 1, n, qs);
else
return _query_(roots[ur], roots[ul - 1], 1, n, qs, qe);
}
};
void solve()
{
cin >> n;
PersistentSegmentTree<ll> segTree(n);
REP(i, 1, n)
{
cin >> arr[i];
mp[arr[i]];
}
for (auto &e : mp)
e.second = ++timer;
REP(i, 1, n)
{
int temp = arr[i];
arr[i] = mp[arr[i]];
rev[arr[i]] = temp;
segTree.update(arr[i], 1);
}
cin >> q;
REP(x, 1, q)
{
int i, j, k;
cin >> i >> j >> k;
k = bs(k) + 1;
cout << segTree.query(i, j, k, n) << endl;
}
}
int main(int argc, char const *argv[])
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
// freopen("input.txt","r",stdin);
// freopen("output.txt","w",stdout);
int t = 1;
// cin >> t;
REP(tc, 1, t)
{
// cout<<"Case "<<tc<<":"<<endl;
solve();
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgbGwgbG9uZyBsb25nIGludAojZGVmaW5lIHBpaSBwYWlyPGludCwgaW50PgojZGVmaW5lIFJFUChpLCBhLCBiKSBmb3IgKGludCBpID0gYTsgaSA8PSBiOyBpKyspCiNkZWZpbmUgUlJFUChpLCBhLCBiKSBmb3IgKGludCBpID0gYTsgaSA+PSBiOyBpLS0pCiNkZWZpbmUgZW5kbCAiXG4iCiNkZWZpbmUgYWxsKHgpICh4KS5iZWdpbigpLCAoeCkuZW5kKCkKI2RlZmluZSBwaSAzLjE0MTU5MjY1MzU4OTc5MzIzOAoKI2RlZmluZSBtYXhOIDMwMDAxCiNkZWZpbmUgSU5GIDEwMDAwMDAwMDAKI2RlZmluZSBtb2QgMTAwMDAwMDAwNwojZGVmaW5lIHByaW50ZCh4KSBjb3V0IDw8IGZpeGVkIDw8IHNldHByZWNpc2lvbigxMCkgPDwgeAovLyBpbnQgZHhbXSA9IHstMiwgLTEsIDEsIDIsIDIsIDEsIC0xLCAtMn07Ci8vIGludCBkeVtdID0gezEsIDIsIDIsIDEsIC0xLCAtMiwgLTIsIC0xfTsKLy8gaW50IGR4W10gPSB7LTEsIDAsIDEsIDAsIDEsIC0xLCAxLCAtMX07Ci8vIGludCBkeVtdID0gezAsIC0xLCAwLCAxLCAtMSwgLTEsIDEsIDF9OwoKaW50IG4sIHE7CmludCBhcnJbbWF4Tl07CmludCByZXZbbWF4Tl07Cm1hcDxpbnQsIGludD4gbXA7CmludCB0aW1lciA9IDA7CgppbnQgYnMoaW50IGspCnsKICAgIC8vIGluZGV4IHdoZXJlIGFycltpbmRleF0gPD0gawogICAgaW50IHN0YXJ0ID0gMSwgZW5kID0gdGltZXI7CgogICAgd2hpbGUgKHN0YXJ0IDw9IGVuZCkKICAgIHsKICAgICAgICBpbnQgbWlkID0gKHN0YXJ0ICsgZW5kKSAvIDI7CgogICAgICAgIGlmIChyZXZbbWlkXSA8PSBrICYmIChtaWQgPT0gZW5kIHx8IHJldlttaWQgKyAxXSA+IGspKQogICAgICAgICAgICByZXR1cm4gbWlkOwogICAgICAgIGVsc2UgaWYgKHJldlttaWRdIDw9IGspCiAgICAgICAgICAgIHN0YXJ0ID0gbWlkICsgMTsKICAgICAgICBlbHNlCiAgICAgICAgICAgIGVuZCA9IG1pZCAtIDE7CiAgICB9CgogICAgcmV0dXJuIDA7IC8vIHRoZW4gYW5zd2VyID0gc2l6ZSBvZiByYW5nZQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KY2xhc3MgUGVyc2lzdGVudFNlZ21lbnRUcmVlCnsKICAgIGludCBuOwogICAgdmVjdG9yPFQ+IHNlZ1RyZWU7CiAgICB2ZWN0b3I8aW50PiBsZWZ0LCByaWdodDsKICAgIHZlY3RvcjxpbnQ+IHJvb3RzOwogICAgaW50IGluZGV4OwoKcHVibGljOgogICAgUGVyc2lzdGVudFNlZ21lbnRUcmVlKCkge30KCiAgICBpbnQgYnVpbGQoaW50IHNzLCBpbnQgc2UpCiAgICB7CiAgICAgICAgaW50IG5vZGUgPSArK2luZGV4OwoKICAgICAgICBpZiAoc3MgPT0gc2UpCiAgICAgICAgewogICAgICAgICAgICBzZWdUcmVlW25vZGVdID0gMDsKICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIGludCBtaWQgPSAoc3MgKyBzZSkgLyAyOwogICAgICAgICAgICBsZWZ0W25vZGVdID0gYnVpbGQoc3MsIG1pZCk7CiAgICAgICAgICAgIHJpZ2h0W25vZGVdID0gYnVpbGQobWlkICsgMSwgc2UpOwogICAgICAgICAgICBzZWdUcmVlW25vZGVdID0gMDsKICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgICAgfQogICAgfQoKICAgIFBlcnNpc3RlbnRTZWdtZW50VHJlZShpbnQgTikKICAgIHsKICAgICAgICBuID0gTjsKICAgICAgICBzZWdUcmVlLnJlc2l6ZShOICogMjEpOwogICAgICAgIGxlZnQucmVzaXplKE4gKiAyMSk7CiAgICAgICAgcmlnaHQucmVzaXplKE4gKiAyMSk7CiAgICAgICAgaW5kZXggPSAwOwogICAgICAgIHJvb3RzLnB1c2hfYmFjayhidWlsZCgxLCBuKSk7CiAgICB9CgogICAgdm9pZCByZXNpemUoaW50IE4pCiAgICB7CiAgICAgICAgbiA9IE47CiAgICAgICAgc2VnVHJlZS5yZXNpemUoTiAqIDIxKTsKICAgICAgICBsZWZ0LnJlc2l6ZShOICogMjEpOwogICAgICAgIHJpZ2h0LnJlc2l6ZShOICogMjEpOwogICAgICAgIGluZGV4ID0gMDsKICAgICAgICByb290cy5wdXNoX2JhY2soYnVpbGQoMSwgbikpOwogICAgfQoKICAgIGludCBfdXBkYXRlXyhpbnQgcHJldk5vZGUsIGludCBzcywgaW50IHNlLCBpbnQgcWksIFQgdmFsKQogICAgewogICAgICAgIGludCBub2RlID0gKytpbmRleDsKCiAgICAgICAgaWYgKHNzID09IHNlKQogICAgICAgIHsKICAgICAgICAgICAgc2VnVHJlZVtub2RlXSA9IHNlZ1RyZWVbcHJldk5vZGVdICsgdmFsOwogICAgICAgICAgICByZXR1cm4gbm9kZTsKICAgICAgICB9CgogICAgICAgIGludCBtaWQgPSAoc3MgKyBzZSkgLyAyOwoKICAgICAgICBpZiAocWkgPD0gbWlkKQogICAgICAgIHsKICAgICAgICAgICAgcmlnaHRbbm9kZV0gPSByaWdodFtwcmV2Tm9kZV07CiAgICAgICAgICAgIGxlZnRbbm9kZV0gPSBfdXBkYXRlXyhsZWZ0W3ByZXZOb2RlXSwgc3MsIG1pZCwgcWksIHZhbCk7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIGxlZnRbbm9kZV0gPSBsZWZ0W3ByZXZOb2RlXTsKICAgICAgICAgICAgcmlnaHRbbm9kZV0gPSBfdXBkYXRlXyhyaWdodFtwcmV2Tm9kZV0sIG1pZCArIDEsIHNlLCBxaSwgdmFsKTsKICAgICAgICB9CgogICAgICAgIHNlZ1RyZWVbbm9kZV0gPSBzZWdUcmVlW2xlZnRbbm9kZV1dICsgc2VnVHJlZVtyaWdodFtub2RlXV07CiAgICAgICAgcmV0dXJuIG5vZGU7CiAgICB9CgogICAgdm9pZCB1cGRhdGUoaW50IGluZGV4LCBUIHZhbCkKICAgIHsKICAgICAgICByb290cy5wdXNoX2JhY2soX3VwZGF0ZV8ocm9vdHMuYmFjaygpLCAxLCBuLCBpbmRleCwgdmFsKSk7CiAgICB9CgogICAgVCBfcXVlcnlfKGludCBub2RlQSwgaW50IG5vZGVCLCBpbnQgc3MsIGludCBzZSwgaW50IHFzLCBpbnQgcWUpCiAgICB7CiAgICAgICAgaWYgKHFzID4gc2UgfHwgcWUgPCBzcykKICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgaWYgKHFzIDw9IHNzICYmIHFlID49IHNlKQogICAgICAgICAgICByZXR1cm4gc2VnVHJlZVtub2RlQV0gLSBzZWdUcmVlW25vZGVCXTsKICAgICAgICBpbnQgbWlkID0gKHNzICsgc2UpIC8gMjsKICAgICAgICByZXR1cm4gX3F1ZXJ5XyhsZWZ0W25vZGVBXSwgbGVmdFtub2RlQl0sIHNzLCBtaWQsIHFzLCBxZSkgKyBfcXVlcnlfKHJpZ2h0W25vZGVBXSwgcmlnaHRbbm9kZUJdLCBtaWQgKyAxLCBzZSwgcXMsIHFlKTsKICAgIH0KCiAgICBUIF9xdWVyeV8oaW50IG5vZGVBLCBpbnQgbm9kZUIsIGludCBzcywgaW50IHNlLCBpbnQgaykKICAgIHsKICAgICAgICBpZiAoc3MgPT0gc2UpCiAgICAgICAgICAgIHJldHVybiBzczsKCiAgICAgICAgaW50IGRpZmYgPSBzZWdUcmVlW2xlZnRbbm9kZUFdXSAtIHNlZ1RyZWVbbGVmdFtub2RlQl1dOwogICAgICAgIGludCBtaWQgPSAoc3MgKyBzZSkgLyAyOwoKICAgICAgICBpZiAoZGlmZiA+PSBrKQogICAgICAgICAgICByZXR1cm4gX3F1ZXJ5XyhsZWZ0W25vZGVBXSwgbGVmdFtub2RlQl0sIHNzLCBtaWQsIGspOwogICAgICAgIGVsc2UKICAgICAgICAgICAgcmV0dXJuIF9xdWVyeV8ocmlnaHRbbm9kZUFdLCByaWdodFtub2RlQl0sIG1pZCArIDEsIHNlLCBrIC0gZGlmZik7CiAgICB9CgogICAgVCBxdWVyeShpbnQgdWwsIGludCB1ciwgaW50IHFzLCBpbnQgcWUgPSAtMSkKICAgIHsKICAgICAgICBpZiAocWUgPT0gLTEpCiAgICAgICAgICAgIHJldHVybiBfcXVlcnlfKHJvb3RzW3VyXSwgcm9vdHNbdWwgLSAxXSwgMSwgbiwgcXMpOwogICAgICAgIGVsc2UKICAgICAgICAgICAgcmV0dXJuIF9xdWVyeV8ocm9vdHNbdXJdLCByb290c1t1bCAtIDFdLCAxLCBuLCBxcywgcWUpOwogICAgfQp9OwoKdm9pZCBzb2x2ZSgpCnsKICAgIGNpbiA+PiBuOwoKICAgIFBlcnNpc3RlbnRTZWdtZW50VHJlZTxsbD4gc2VnVHJlZShuKTsKCiAgICBSRVAoaSwgMSwgbikKICAgIHsKICAgICAgICBjaW4gPj4gYXJyW2ldOwogICAgICAgIG1wW2FycltpXV07CiAgICB9CgogICAgZm9yIChhdXRvICZlIDogbXApCiAgICAgICAgZS5zZWNvbmQgPSArK3RpbWVyOwoKICAgIFJFUChpLCAxLCBuKQogICAgewogICAgICAgIGludCB0ZW1wID0gYXJyW2ldOwogICAgICAgIGFycltpXSA9IG1wW2FycltpXV07CiAgICAgICAgcmV2W2FycltpXV0gPSB0ZW1wOwogICAgICAgIHNlZ1RyZWUudXBkYXRlKGFycltpXSwgMSk7CiAgICB9CgogICAgY2luID4+IHE7CgogICAgUkVQKHgsIDEsIHEpCiAgICB7CiAgICAgICAgaW50IGksIGosIGs7CiAgICAgICAgY2luID4+IGkgPj4gaiA+PiBrOwogICAgICAgIGsgPSBicyhrKSArIDE7CiAgICAgICAgY291dCA8PCBzZWdUcmVlLnF1ZXJ5KGksIGosIGssIG4pIDw8IGVuZGw7CiAgICB9Cn0KCmludCBtYWluKGludCBhcmdjLCBjaGFyIGNvbnN0ICphcmd2W10pCnsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZShOVUxMKTsKICAgIGNvdXQudGllKE5VTEwpOwoKICAgIC8vIGZyZW9wZW4oImlucHV0LnR4dCIsInIiLHN0ZGluKTsKICAgIC8vIGZyZW9wZW4oIm91dHB1dC50eHQiLCJ3IixzdGRvdXQpOwoKICAgIGludCB0ID0gMTsKCiAgICAvLyBjaW4gPj4gdDsKCiAgICBSRVAodGMsIDEsIHQpCiAgICB7CiAgICAgICAgLy8gY291dDw8IkNhc2UgIjw8dGM8PCI6Ijw8ZW5kbDsKICAgICAgICBzb2x2ZSgpOwogICAgfQoKICAgIHJldHVybiAwOwp9