专栏文章

题解:AT_abc391_c [ABC391C] Pigeonhole Query

AT_abc391_c题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@miqcz1r3
此快照首次捕获于
2025/12/04 02:46
3 个月前
此快照最后确认于
2025/12/04 02:46
3 个月前
查看原文

思路:

当为操作 11 时,

如果那只鸽子原来所在的巢有 22 只鸽子,则将答案减 11。 然后把鸽子原来的巢的鸽子数减 11 并将鸽子改到新的巢。
如果新的巢有 11 只鸽子,那么把答案加 11,并把新的巢的鸽子数加 11

当为操作 22 时,

输出答案即可。

代码:

CPP
#include<bits/stdc++.h>
//#define int long long
#define gcd(x,y) __gcd(x,y) 
using namespace std;
int n,q,ans,a[1000005],b[1000005];
signed main(){
	//freopen(".in","r",stdin);
	//freopen(".out","w",stdout);
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
	cin>>n>>q;
	for(int i=1;i<=n;++i) a[i]=1,b[i]=i;
	while(q--){
		int op;
		cin>>op;
		if(op==1){
			int x,y;
			cin>>x>>y;
			if(a[b[x]]==2) --ans;
			--a[b[x]];
			b[x]=y;
			if(a[y]==1) ++ans;
			++a[y];
		}
		else{
			cout<<ans<<'\n';
			/*
			for(int i=1;i<=n;++i)
				cerr<<a[i]<<' ';
			cerr<<'\n';*/
		}
	}
	return 0;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...