每日一题 - 231126 - E - Mex and Update

  • E - Mex and Update

  • TAG - s e t 、思维 set、思维 set、思维
  • 时间复杂度 - O ( max ⁡ ( N , Q ) ) O(\max (N,Q)) O(max(N,Q))
//
#include
using namespace std;
// #define int long long 

const int N=2e5+6;
int in[N+5],cnt[N+5];

void solve()
{
    int n,q;

    scanf("%d%d",&n,&q );
    for( int i=1;i<=n;i++ )
    {
        scanf("%d",&in[i] );
        if( in[i]<=n ) cnt[in[i]]++;
    }

    set<int> st;
    for( int i=0;i<=n;i++ )
        if( cnt[i]==0 ) st.insert(i);

    while( q-- )
    {
        int idx,data;
        scanf("%d%d",&idx,&data );

        if( in[idx]<=n && --cnt[in[idx]]==0 ) st.insert(in[idx]);
        if( data<=n && ++cnt[data]==1 ) st.erase(data); 
        in[idx]=data; 

        printf("%d\n",*st.begin() );
    }
}

signed main()
{
    int t=1;
    // scanf("%d",&t );
    while( t-- ) solve();
    return 0;
}

实现细节

  • 正难则反

参考示意图


参考链接

  • set erase() - C++ STL set:erase()、clear()、find()、insert()方法
  • set emplace() - C++ STL set
  • 【c++】insert和emplace的区别
  • map的insert和emplace比较
  • std::views::iota(a, b) - C++ 20 新特性 ranges 精讲

作者 | 乐意奥AI

你可能感兴趣的:(ACM,算法)