AT_abc366_c 的題解

Jerry_heng發表於2024-08-12

(一)

動態統計袋中每個數的出現個數和不同的數的個數。

當一個數出現個數從 \(0\) 加到 \(1\) 時,不同的數個數 \(+1\),從 \(1\) 減到 \(0\) 時,不同的數個數 \(-1\)

具體看程式碼,挺好理解的。

(二)

AC 程式碼。

#include<bits/stdc++.h>
#define db double
#define pb push_back
#define fi first
#define se second
#define mkp make_pair
#define pii pair<int,int>
using namespace std;
inline int read(){
    int x=0,f=1;char c=getchar();
    while(c<'0'||c>'9'){if(c=='-')f=-f;c=getchar();}
    while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
    return x*f; 
}
int ans,vis[1000010];
signed main(){
    #ifndef ONLINE_JUDGE
    freopen("in.txt","r",stdin);
    freopen("out.txt","w",stdout);
    #endif
    int T=read();
    while(T--){
    	int op=read();
    	if(op==3)printf("%d\n",ans);
    	if(op==1){
    		int x=read();
    		if(!vis[x])ans++;
    		vis[x]++;
    	}
    	if(op==2){
    		int x=read();
    		vis[x]--;
    		if(!vis[x])ans--;
    	}
    }
    return 0;
}