Problem p02630 (C++) — buggy submission, verdict: Time Limit Exceeded

#include <bits/stdc++.h>
using namespace std;
typedef long long lol;

// マクロ
// forループ関係
// 引数は、(ループ内変数,動く範囲)か(ループ内変数,始めの数,終わりの数)、のどちらか
// Dがついてないものはループ変数は1ずつインクリメントされ、Dがついてるものはループ変数は1ずつデクリメントされる
#define REP(i, n) for (lol i = 0; i < lol(n); i++)
#define REPD(i, n) for (lol i = n - 1; i >= 0; i--)
#define FOR(i, a, b) for (lol i = a; i <= lol(b); i++)
#define FORD(i, a, b) for (lol i = a; i >= lol(b); i--)
// xにはvectorなどのコンテナ
#define ALL(x) x.begin(), x.end() // sortなどの引数を省略したい
#define SIZE(x) lol(x.size())     // sizeをsize_tからllに直しておく
// 定数
#define INF 1000000000000 // 10^12:極めて大きい値,∞
#define MOD 1000000007    // 10^9+7:合同式の法
#define MAXR 100000 // 10^5:配列の最大のrange(素数列挙などで使用)
// 最大値最小値
template <class T> bool chmax(T &a, const T &b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T> bool chmin(T &a, const T &b) {
  if (b < a) {
    a = b;
    return 1;
  }
  return 0;
}
int gcd(int a, int b) { return b ? gcd(b, a % b) : a; }

int main() {
  // lol result{0};
  lol n;
  cin >> n;
  int x;
  lol sum{0};
  // int k; cin >> k;
  vector<int> a(100001);
  REP(i, n) {
    cin >> x;
    a[x]++;
    sum += x;
  }
  int q;
  cin >> q;
  vector<int> b(q);
  vector<int> c(q);
  REP(i, q) {
    cin >> b[i];
    cin >> c[i];
  }
  REP(i, q) {
    int count{0};
    count = a[b[i]];
    sum = sum + (c[i] - b[i]) * count;
    cout << sum;
    cout << endl;
    a[b[i]] = 0;
    a[c[i]] += count;
  }

  // cout << result << endl;
  return 0;
}

Error: TLE

Fixed submission:

#include <bits/stdc++.h>
using namespace std;
typedef long long lol;

// マクロ
// forループ関係
// 引数は、(ループ内変数,動く範囲)か(ループ内変数,始めの数,終わりの数)、のどちらか
// Dがついてないものはループ変数は1ずつインクリメントされ、Dがついてるものはループ変数は1ずつデクリメントされる
#define REP(i, n) for (lol i = 0; i < lol(n); i++)
#define REPD(i, n) for (lol i = n - 1; i >= 0; i--)
#define FOR(i, a, b) for (lol i = a; i <= lol(b); i++)
#define FORD(i, a, b) for (lol i = a; i >= lol(b); i--)
// xにはvectorなどのコンテナ
#define ALL(x) x.begin(), x.end() // sortなどの引数を省略したい
#define SIZE(x) lol(x.size())     // sizeをsize_tからllに直しておく
// 定数
#define INF 1000000000000 // 10^12:極めて大きい値,∞
#define MOD 1000000007    // 10^9+7:合同式の法
#define MAXR 100000 // 10^5:配列の最大のrange(素数列挙などで使用)
// 最大値最小値
template <class T> bool chmax(T &a, const T &b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T> bool chmin(T &a, const T &b) {
  if (b < a) {
    a = b;
    return 1;
  }
  return 0;
}
int gcd(int a, int b) { return b ? gcd(b, a % b) : a; }

int main() {
  // lol result{0};
  lol n;
  cin >> n;
  lol sum{0};
  // int k; cin >> k;
  vector<int> a(n);
  REP(i, n) {
    cin >> a[i];
    sum += a[i];
  }
  int q;
  cin >> q;
  vector<int> b(q);
  vector<int> c(q);
  REP(i, q) {
    cin >> b[i];
    cin >> c[i];
  }
  REP(i, q) {
    // sort(ALL(a));
    int count{0};
    REP(j, n) {
      if (a[j] == b[i]) {
        a[j] = c[i];
        count++;
        // cout << "count: " << count << endl;
      }
      /*else if(a[j] > b[i])
      {
          //cout << a[j] << " " << b[i] << endl;
          //cout << "break" << endl;
          break;
      }*/
    }
    sum = sum + (c[i] - b[i]) * count;
    cout << sum;
    cout << endl;
  }

  // cout << result << endl;
  return 0;
}