比赛 2025.3.18 评测结果 AAATTTTTTT
题目名称 公约数数列 最终得分 30
用户昵称 徐诗畅 运行时间 21.272 s
代码语言 C++ 内存使用 4.58 MiB
提交时间 2025-03-18 20:01:16
显示代码纯文本
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+5;
int n,a[N],b[N];
int gcd(int x,int y){return y==0?x:gcd(y,x%y);}
signed main(){
	freopen("gcdxor.in","r",stdin);
	freopen("gcdxor.out","w",stdout);
	scanf("%lld",&n);
	for(int i = 1;i<=n;i++) scanf("%lld",&a[i]);
	int g=a[1],xo=a[1]; b[1]=g*xo;
	for(int i = 2;i<=n;i++){
		g=gcd(g,a[i]); xo^=a[i];
		b[i]=g*xo;
	}
	int q; cin>>q;
	while(q--){
		string s; int id,x;
		cin>>s;
		if(s[0]=='M'){
			scanf("%lld%lld",&id,&x); id++;
			a[id]=x;
		    g=a[1],xo=a[1]; b[1]=g*xo;
         	for(int i = 2;i<=n;i++){
	        	g=gcd(g,a[i]); xo^=a[i];
	        	b[i]=g*xo;
        	}
		}
		else{
			scanf("%lld",&x);
			int f=0;
			for(int i = 1;i<=n;i++){
				if(b[i]==x){
					f=1; printf("%lld\n",i-1); break;
				}
			}
			if(!f) puts("no");
		}
	}
	return 0;
}