ABC343D 题解
题目传送门。
显然,如果每一次进行操作都重新枚举,一定超时。
但是每一次操作只会对一个数修改,所以我们只需要记录一个数的改变即可。
约定 为修改前的数, 为修改后的数。
- 若修改后 的个数为 ,则 是首次出现,答案加 。
- 若修改后 的个数为 ,则 没有了,答案减 。
由于 ,所以使用 map。
#include<iostream>
#include<map>
using namespace std;
map<long long,int>a;
int n,t,now[200005];
int x,y,ans=1;
int main(){
cin>>n>>t;
a[0]=n;
for(int i=1;i<=t;i++){
cin>>x>>y;
a[now[x]]--;
if(a[now[x]]==0)ans--;
now[x]+=y;
a[now[x]]++;
if(a[now[x]]==1)ans++;
cout<<ans<<endl;
}
return 0;
}

浙公网安备 33010602011771号