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 @   Weslie_qwq  阅读(2)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示