int choice[MAX]; int abilities[MAX]; int missionSelectedSum[MAX]; int missions[MAX];
intmain(){ std::ios::sync_with_stdio(false); std::cin.tie(0); int n; cin >> n; set<int> ability; unordered_set<int> missionSelected[n + 1]; int tmp; // 找起点 for (int i = 1; i <= n; i++) { cin >> choice[i]; } for (int i = 1; i <= n; i++) { cin >> missions[i]; } for (int i = 1; i <= n; i++) { cin >> tmp; missionSelected[choice[i]].insert(tmp); } int minSum = n + 1; missionSelectedSum[0] = 0; for (int i = 1; i <= n; i++) { missionSelectedSum[i] = missionSelectedSum[i - 1] + missionSelected[i].size() - 1; } // find the min sum int start = 1; for (int i = 1; i <= n; i++) { if (minSum > missionSelectedSum[i]) { start = i; minSum = missionSelectedSum[i]; } } start += 1; // 开始了 int ans = 0; for (int i = start; i <= n; i++) { for (auto it:missionSelected[i]) { ability.insert(it); } if (ability.empty()) { continue; } auto it = ability.lower_bound(missions[i]); if (it != ability.end()) { ans += 1; ability.erase(it); } else { ability.erase(ability.begin()); } } for (int i = 1; i < start; i++) { for (auto it:missionSelected[i]) { ability.insert(it); } if (ability.empty()) { continue; } auto it = ability.lower_bound(missions[i]); if (it != ability.end()) { ans += 1; ability.erase(it); } else { ability.erase(ability.begin()); } } cout << ans << endl; return0; }