ABC343D 题解

题目传送门

显然,如果每一次进行操作都重新枚举,一定超时。

但是每一次操作只会对一个数修改,所以我们只需要记录一个数的改变即可。

约定 pp 为修改前的数,qq 为修改后的数。

  • 若修改后 qq 的个数为 11,则 qq 是首次出现,答案加 11
  • 若修改后 pp 的个数为 00,则 pp 没有了,答案减 11

由于 Bi109B_i\le10^9,所以使用 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;
}
posted @ 2024-03-06 22:29  Weslie_qwq  阅读(7)  评论(0)    收藏  举报  来源