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

// 2020年4月17日現在

#include <algorithm>
#include <bitset>
#include <cassert>
#include <chrono>
#include <cmath>
#include <complex>
#include <cstdio>
#include <fstream>
#include <functional>
#include <iomanip>
#include <iostream>
#include <limits>
#include <list>
#include <map>
#include <math.h>
#include <numeric>
#include <queue>
#include <random>
#include <set>
#include <stack>
#include <stdio.h>
#include <string>
#include <thread>
#include <tuple>
#include <unordered_map>
#include <unordered_set>
#include <utility>
#include <vector>

using namespace std;

template <class... A> void prints() { cout << "\\n"; }
template <class... A> void prints_rest() { cout << "\\n"; }
template <class T, class... A>
void prints_rest(const T &first, const A &...rest) {
  cout << " " << first;
  prints_rest(rest...);
}
template <class T, class... A> void prints(const T &first, const A &...rest) {
  cout << first;
  prints_rest(rest...);
}
template <class T, class... A> void printd(const T &first, const A &...rest) {
  cout << fixed << setprecision(15) << first;
  prints_rest(rest...);
}

namespace {
// printElems(&a[0], &a[n]);　みたいな感じで使う。
void printElems(const int *begin, const int *end) {
  for (const int *p = begin; p != end; ++p) {
    std::cout << *p << ' ';
  }
  std::cout << std::endl;
}
} // namespace

#define rep(i, n) for (int i = 0; i < n; i++)
#define rep1(i, n) for (int i = 1; i < n + 1; i++)
#define repr(i, n) for (int i = n - 1; i >= 0; i--)
#define repr1(i, n) for (int i = n; i > 0; i--)
#define FOR(i, j, n) for (int i = j; i < n; i++)
#define souatari(i, j, n) rep1(i, n - 1) rep(j, i)
#define souatari1(i, j, n)                                                     \\
  for (int i = 2; i < n + 1; i++)                                              \\
  rep1(j, i - 1)
#define mp make_pair
#define F first
#define S second
#define elif else if

typedef long long ll;
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef vector<ll> vll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<pii> vpii;
typedef array<int, 3> arr3;
typedef long double D;

const ll llinf = numeric_limits<ll>::max();
const ll _llinf = numeric_limits<ll>::lowest();
const int inf = numeric_limits<int>::max();
const int _inf = numeric_limits<int>::lowest();
const double dinf = numeric_limits<double>::infinity();
const ll MOD = 1000000007;
// const ll MOD = 998244353;
const ll BIG = 1LL << 60;

ll a[100005];
ll tmplist[100005];

int main() {
  ll n;
  cin >> n;
  rep(i, n) cin >> a[i];
  ll q;
  cin >> q;
  ll ans = 0;
  rep(i, n) {
    tmplist[a[i]]++;
    ans += a[i];
  }
  vll anslist;
  rep(i, q) {
    ll b, c;
    cin >> b >> c;
    ans += tmplist[b] * (c - b);
    tmplist[c] += tmplist[b];
    tmplist[b] = 0;
    anslist.push_back(ans);
  }
  for (const auto &x : anslist) {
    prints(x);
  }

  return 0;
}


Error: TLE

Fixed submission:

// 2020年4月17日現在

#include <algorithm>
#include <bitset>
#include <cassert>
#include <chrono>
#include <cmath>
#include <complex>
#include <cstdio>
#include <fstream>
#include <functional>
#include <iomanip>
#include <iostream>
#include <limits>
#include <list>
#include <map>
#include <math.h>
#include <numeric>
#include <queue>
#include <random>
#include <set>
#include <stack>
#include <stdio.h>
#include <string>
#include <thread>
#include <tuple>
#include <unordered_map>
#include <unordered_set>
#include <utility>
#include <vector>

using namespace std;

template <class... A> void prints() { cout << "\\n"; }
template <class... A> void prints_rest() { cout << "\\n"; }
template <class T, class... A>
void prints_rest(const T &first, const A &...rest) {
  cout << " " << first;
  prints_rest(rest...);
}
template <class T, class... A> void prints(const T &first, const A &...rest) {
  cout << first;
  prints_rest(rest...);
}
template <class T, class... A> void printd(const T &first, const A &...rest) {
  cout << fixed << setprecision(15) << first;
  prints_rest(rest...);
}

namespace {
// printElems(&a[0], &a[n]);　みたいな感じで使う。
void printElems(const int *begin, const int *end) {
  for (const int *p = begin; p != end; ++p) {
    std::cout << *p << ' ';
  }
  std::cout << std::endl;
}
} // namespace

#define rep(i, n) for (int i = 0; i < n; i++)
#define rep1(i, n) for (int i = 1; i < n + 1; i++)
#define repr(i, n) for (int i = n - 1; i >= 0; i--)
#define repr1(i, n) for (int i = n; i > 0; i--)
#define FOR(i, j, n) for (int i = j; i < n; i++)
#define souatari(i, j, n) rep1(i, n - 1) rep(j, i)
#define souatari1(i, j, n)                                                     \\
  for (int i = 2; i < n + 1; i++)                                              \\
  rep1(j, i - 1)
#define mp make_pair
#define F first
#define S second
#define elif else if

typedef long long ll;
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef vector<ll> vll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<pii> vpii;
typedef array<int, 3> arr3;
typedef long double D;

const ll llinf = numeric_limits<ll>::max();
const ll _llinf = numeric_limits<ll>::lowest();
const int inf = numeric_limits<int>::max();
const int _inf = numeric_limits<int>::lowest();
const double dinf = numeric_limits<double>::infinity();
const ll MOD = 1000000007;
// const ll MOD = 998244353;
const ll BIG = 1LL << 60;

ll a[100005];

int main() {
  ll n;
  cin >> n;
  rep(i, n) cin >> a[i];
  ll q;
  cin >> q;
  map<ll, ll> m;
  rep(i, n) {
    decltype(m)::iterator it = m.find(a[i]);
    if (it != m.end()) {
      m[a[i]]++;
    } else {
      m.insert(mp(a[i], 1));
    }
  }
  vll anslist;
  rep(_, q) {
    ll b, c;
    cin >> b >> c;
    ll tmp = m[b];
    m.erase(b);
    decltype(m)::iterator it = m.find(c);
    if (it != m.end()) {
      m[c] += tmp;
    } else {
      m.insert(mp(c, tmp));
    }
    ll ans = 0;
    for (auto itr = m.begin(); itr != m.end(); ++itr) {
      ans += (itr->first) * (itr->second);
    }
    anslist.push_back(ans);
  }
  for (const auto &x : anslist) {
    prints(x);
  }

  return 0;
}