#include <bits/stdc++.h>
using namespace std;
int findLargestValidFeatureSet(vector<int>& feature1, vector<int>& feature2) {
if (feature1.empty()) {
return 0;
}
int n = feature1.size();
vector<pair<int, int>> pairs;
for (int i = 0; i < n; ++i) {
pairs.push_back({feature1[i], feature2[i]});
}
sort(pairs.begin(), pairs.end(), [](const auto& a, const auto& b) {
if (a.first != b.first) {
return a.first < b.first;
}
return a.second > b.second;
});
vector<int> tails;
for (const auto& p : pairs) {
int y = p.second;
auto it = lower_bound(tails.begin(), tails.end(), y);
if (it == tails.end()) {
tails.push_back(y);
} else {
*it = y;
}
}
return tails.size();
}
int main() {
int n, m;
cin >> n;
vector<int> feature1(n);
for (int i=0;i<n;i++) cin >> feature1[i];
cin >> m;
vector<int> feature2(m);
for (int i=0;i<m;i++) cin >> feature2[i];
cout << findLargestValidFeatureSet(feature1, feature2) << endl; // Output: 3
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgZmluZExhcmdlc3RWYWxpZEZlYXR1cmVTZXQodmVjdG9yPGludD4mIGZlYXR1cmUxLCB2ZWN0b3I8aW50PiYgZmVhdHVyZTIpIHsKICAgIGlmIChmZWF0dXJlMS5lbXB0eSgpKSB7CiAgICAgICAgcmV0dXJuIDA7CiAgICB9CgogICAgaW50IG4gPSBmZWF0dXJlMS5zaXplKCk7CiAgICB2ZWN0b3I8cGFpcjxpbnQsIGludD4+IHBhaXJzOwogICAgCiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47ICsraSkgewogICAgICAgIHBhaXJzLnB1c2hfYmFjayh7ZmVhdHVyZTFbaV0sIGZlYXR1cmUyW2ldfSk7CiAgICB9CgogICAgc29ydChwYWlycy5iZWdpbigpLCBwYWlycy5lbmQoKSwgW10oY29uc3QgYXV0byYgYSwgY29uc3QgYXV0byYgYikgewogICAgICAgIGlmIChhLmZpcnN0ICE9IGIuZmlyc3QpIHsKICAgICAgICAgICAgcmV0dXJuIGEuZmlyc3QgPCBiLmZpcnN0OwogICAgICAgIH0KICAgICAgICByZXR1cm4gYS5zZWNvbmQgPiBiLnNlY29uZDsKICAgIH0pOwoKICAgIHZlY3RvcjxpbnQ+IHRhaWxzOwogICAgZm9yIChjb25zdCBhdXRvJiBwIDogcGFpcnMpIHsKICAgICAgICBpbnQgeSA9IHAuc2Vjb25kOwogICAgICAgIGF1dG8gaXQgPSBsb3dlcl9ib3VuZCh0YWlscy5iZWdpbigpLCB0YWlscy5lbmQoKSwgeSk7CiAgICAgICAgCiAgICAgICAgaWYgKGl0ID09IHRhaWxzLmVuZCgpKSB7CiAgICAgICAgICAgIHRhaWxzLnB1c2hfYmFjayh5KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAqaXQgPSB5OwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gdGFpbHMuc2l6ZSgpOwp9CgppbnQgbWFpbigpIHsKCWludCBuLCBtOwoJY2luID4+IG47CiAgICB2ZWN0b3I8aW50PiBmZWF0dXJlMShuKTsKICAgIGZvciAoaW50IGk9MDtpPG47aSsrKSBjaW4gPj4gZmVhdHVyZTFbaV07CiAgICBjaW4gPj4gbTsKICAgIHZlY3RvcjxpbnQ+IGZlYXR1cmUyKG0pOwoJZm9yIChpbnQgaT0wO2k8bTtpKyspIGNpbiA+PiBmZWF0dXJlMltpXTsKCQogICAgY291dCA8PCBmaW5kTGFyZ2VzdFZhbGlkRmVhdHVyZVNldChmZWF0dXJlMSwgZmVhdHVyZTIpIDw8IGVuZGw7ICAvLyBPdXRwdXQ6IDMKCiAgICByZXR1cm4gMDsKfQo=