Hướng dẫn giải của TS10 Vĩnh Phúc 2024 - Bài 3
Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người làm lời giải.
Nộp code mẫu trước khi tự giải được bài tập là một hành vi có thể bị ban.
Subtask ~3~
- Đếm số lần xuất hiện của từng giá trị trong dãy ~A~, ~B~. Định nghĩa ~f_i~ là số giá trị có số lần xuất hiện trong dãy lớn hơn hoặc bằng ~i~, ta chỉ cần duyệt ngược về để tính tổng tiền tố. Kết quả cho từng truy vấn sẽ là ~f_k~ theo định nghĩa của dãy ~A~ và ~f_k~ theo định nghĩa của dãy ~B~.
Code tham khảo
#include <bits/stdc++.h> using namespace std; const int add = 1e5; const int maxn = 2e5 + 5; int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n, Q; cin >> n >> Q; vector<int> cntA(maxn), cntB(maxn); for (int i = 0; i < n; i++) { int value; cin >> value; value += add; cntA[value]++; } for (int i = 0; i < n; i++) { int value; cin >> value; value += add; cntB[value]++; } vector<int> fA(n + 1), fB(n + 1); for (int i = 0; i < maxn; i++) { if (cntA[i]) fA[cntA[i]]++; if (cntB[i]) fB[cntB[i]]++; } for (int i = n - 1; i >= 0; i--) { fA[i] += fA[i + 1]; fB[i] += fB[i + 1]; } for (int i = 0; i < Q; i++) { int k; cin >> k; cout << fA[k] << " " << fB[k] << "\n"; } return 0; }
Bình luận