Đề: https://codeforces.com/edu/course/2/lesson/9/1/practice/contest/307092/problem/C
#include <iostream>
#include <vector>
#include <map>
using namespace std;
int main () {
int n;
int m;
cin >> n >> m;
vector <int> a (n);
vector <int> b (m);
map <int, long long> resa;
map <int, long long> resb;
for (int i = 0; i < n;i++) {
cin >> a[i];
resa [a[i]]++;
}
for (int i = 0; i < m;i++) {
cin >> b[i];
resb [b[i]]++;
}
vector <int> c;
map <int,bool> resc;
for (int i = 0; i < n;i++) {
if (!resc[a[i]]) {
c.push_back(a[i]);
resc[a[i]] = true;
}
}
long long ans = 0;
for (long long i = 0;i < c.size();i++) {
ans+= resa[c[i]] * resb [c[i]];
}
cout << ans;
}
Ở dòng này cho em hỏi tại sao em phải dùng long long thì mới ACcept trong khi đề bảo chỉ cần 10 mũ 5 mà tối đa là 10^5 * 10^5 = 10^10 thì đã có cái biến long long ans giải quyết.
map <int, long long> resa;
map <int, long long> resb;
Mọi người giải thích cho em với, em cảm ơn nhiều ạ. 

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?