ABC330-Eを解いた

問題へのリンク

考察

mexだから、sortedsetあればいいよな、だけど制約が、$A_i <= 10^9$とか書いてある

どうしよう

ここで解説を少し見る

そっか、要素は、最大N個しか失なわれないから、要素は、0からN+1まで準備すればいいのか

で普通にmexの実装をしてACした

ACコード

いつもpython使ってるけど気分で、C++で解いていた コンテスト中じゃなくて良かった

#include <bits/stdc++.h>
#include <map>
#include <set>
using namespace std;

// 型テンプレ
using ll = long long;
using ull = unsigned long long;

// マクロ

#define rep(i, n) for (ll i = 0; i < (int)(n); i++)
#define all(a) (a).begin(), (a).end()

const ll INF = pow(10, 18);
const string upperlist = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
const string lowerlist = "abcdefghijklmnopqrstuvwxyz";
ll N, Q;
map<ll, ll> D;
set<ll> L;

int main() {
  cin >> N >> Q;
  vector<ll> A(N);

  rep(i, N) {
    cin >> A[i];
    D[A[i]]++;
  }

  for (ll i = 0; i <= N + 100; ++i) {
    if (D[i] == 0) {
      L.insert(i);
    }
  }
  while (Q--) {
    ll i, x;
    cin >> i >> x;
    i--;

    D[A[i]]--;

    if (D[A[i]] == 0) {
      L.insert(A[i]);
    }

    A[i] = x;
    D[x]++;

    if (D[x] == 1) {
      L.erase(x);
    }

    cout << *L.begin() << "\n";
  }
}
Hugo で構築されています。
テーマ StackJimmy によって設計されています。