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

#include <bits/stdc++.h>
typedef long long ll;
#define M 1000000007

#define PI 3.141592653589793238462643383279502884197169
using namespace std;

/*     bool comp(pair<ll,ll> a,pair<ll,ll>b ) {
    if(a.second==b.second) return a.first<b.first;
    else return a.second<b.second;
} */

/*ll power(ll a,ll b){
    ll res=1;
    while(b>0){
        a%=M;
        if(b&1)
        res=res*a %M;
        a=a*a%M;
        b>>=1;
    }
    return res;
}
bool isPrime(ll n){
    for(int i=2;i<=sqrt(n);++i)
    if(n%i==0)
    return 0;
    return 1;
}
int cnt=0;
vector<bool>col(8,false),diag1(8,false),diag2(8,0);

void search(int x,vector<string>s){
if(x==8){
   ++cnt;
   return;
}
for(int i=0;i<8;++i){
   if(col[i]||diag1[x+i]||diag2[7+x-i]||s[x][i]=='*') continue;
   col[i]=diag1[x+i]=diag2[7+x-i]=true;
   search(x+1,s);
   col[i]=diag1[x+i]=diag2[7+x-i]=false;
}
} */
struct pt {
  int x, y, num, val;
  bool operator<(const pt &p) const {
    if (y == p.y)
      return x < p.x;
    else
      return y < p.y;
  }
};
bool comp(pt &a, pt &b) {
  if (a.x == b.x)
    return a.y < b.y;
  else
    return a.x < b.x;
}
int main() {
  /*  int t;
cin>>t;
for(int x1=0;x1<t;++x1){


}
*/
  /*  int n;
  cin>>n;
  vector<int>v(n);
  for(int i=0;i<n;++i)
  cin>>v[i];
 sort(v.begin(),v.end());
 int i=0,j=n-1;
 int t=0;
 int sum=0;
 while(i<n){
     if(sum+v[i]<=v[j])
     {sum+=v[i];
     ++i;


 }  */
  int n;
  cin >> n;
  multiset<int> s;
  long long sum = 0;
  vector<int> mp(100001);
  for (int i = 0; i < n; ++i) {
    int x;
    cin >> x;
    mp[x] += 1;
    sum += x;
    s.insert(x);
  }
  int q;
  cin >> q;

  for (int i = 1; i <= q; ++i) {
    int a, b;
    cin >> a >> b;
    int cnt = mp[a];
    sum = sum + cnt * (b - a);
    s.erase(a);
    s.insert(b);
    mp[b] = mp[b] + cnt;
    mp[a] = 0;
    cout << sum << '\\n';
  }

  return 0;
}

Error: TLE

Fixed submission:

#include <bits/stdc++.h>
typedef long long ll;
#define M 1000000007

#define PI 3.141592653589793238462643383279502884197169
using namespace std;

/*     bool comp(pair<ll,ll> a,pair<ll,ll>b ) {
    if(a.second==b.second) return a.first<b.first;
    else return a.second<b.second;
} */

/*ll power(ll a,ll b){
    ll res=1;
    while(b>0){
        a%=M;
        if(b&1)
        res=res*a %M;
        a=a*a%M;
        b>>=1;
    }
    return res;
}
bool isPrime(ll n){
    for(int i=2;i<=sqrt(n);++i)
    if(n%i==0)
    return 0;
    return 1;
}
int cnt=0;
vector<bool>col(8,false),diag1(8,false),diag2(8,0);

void search(int x,vector<string>s){
if(x==8){
   ++cnt;
   return;
}
for(int i=0;i<8;++i){
   if(col[i]||diag1[x+i]||diag2[7+x-i]||s[x][i]=='*') continue;
   col[i]=diag1[x+i]=diag2[7+x-i]=true;
   search(x+1,s);
   col[i]=diag1[x+i]=diag2[7+x-i]=false;
}
} */
struct pt {
  int x, y, num, val;
  bool operator<(const pt &p) const {
    if (y == p.y)
      return x < p.x;
    else
      return y < p.y;
  }
};
bool comp(pt &a, pt &b) {
  if (a.x == b.x)
    return a.y < b.y;
  else
    return a.x < b.x;
}
int main() {
  /*  int t;
cin>>t;
for(int x1=0;x1<t;++x1){


}
*/
  /*  int n;
  cin>>n;
  vector<int>v(n);
  for(int i=0;i<n;++i)
  cin>>v[i];
 sort(v.begin(),v.end());
 int i=0,j=n-1;
 int t=0;
 int sum=0;
 while(i<n){
     if(sum+v[i]<=v[j])
     {sum+=v[i];
     ++i;


 }  */
  int n;
  cin >> n;
  multiset<int> s;
  unsigned long long sum = 0;
  multimap<int, int> mp;
  for (int i = 0; i < n; ++i) {
    int x;
    cin >> x;
    sum += x;
    s.insert(x);
  }
  int q;
  cin >> q;

  for (int i = 1; i <= q; ++i) {
    int a, b;
    cin >> a >> b;
    int cnt = s.count(a);
    sum = sum + cnt * (b - a);
    s.erase(a);
    while (cnt--) {
      s.insert(b);
    }
    cout << sum << '\\n';
  }

  return 0;
}