Topics

For each query q, you are provided numbers a and b. Replace all occurrences of a with b and print the total sum.

Idea

Store frequencies in frequency array and for each query, account for the “change” i.e. (b-a)*freq[a] and then update the frequency array accordingly:

  • Update frequency of b’s: freq[b] += freq[a] (since all a’s became b)
  • Clear a’s: freq[a] = 0

Code

void solve() {
  int n;
  cin >> n;
  vector<int> freq(1e5 + 1);
  ll total = 0;
  int el;
  for (int i = 0; i < n; ++i) {
    cin >> el;
    total += el;
    freq[el]++;
  }
 
  int q;
  int a, b;
  cin >> q;
  while (q--) {
    cin >> a >> b;
    total += (b-a)*freq[a];
    cout << total << '\n';
    freq[b] += freq[a];
    freq[a] = 0;
  }
}