专业行业网站建设,建设银行 网站用户变成个人用户,内网网站建设,网站建设 资讯对于sqrt(300000)的询问#xff0c;对每个模数直接记录结果#xff0c;每次加入新数时暴力更新每个模数的结果。 对于sqrt(300000)的询问#xff0c;枚举倍数#xff0c;每次查询大于等于这个倍数的最小数是多少#xff0c;这个操作通过将询问逆序使用并查集支持。…对于sqrt(300000)的询问对每个模数直接记录结果每次加入新数时暴力更新每个模数的结果。 对于sqrt(300000)的询问枚举倍数每次查询大于等于这个倍数的最小数是多少这个操作通过将询问逆序使用并查集支持。 1 #includecstdio2 #includealgorithm3 #define rep(i,l,r) for (int i(l); i(r); i)4 using namespace std;5 6 const int N300010,M300000,B550;7 char ch;8 int n,x,a[N],ans[N],q[N],q2[N],fa[N];9 int get(int x){ return (fa[x]x) ? x : fa[x]get(fa[x]); }
10
11 int main(){
12 freopen(bzoj4320.in,r,stdin);
13 freopen(bzoj4320.out,w,stdout);
14 scanf(%d,n);
15 rep(i,0,M) fa[i]i1; fa[M1]M1;
16 rep(i,1,B) a[i]i1;
17 rep(i,1,n){
18 scanf( %c,ch);
19 if (chA){
20 scanf(%d,x); fa[x]x;
21 rep(j,1,B) a[j]min(a[j],x%j);
22 q[i]1; q2[i]x;
23 }else{
24 scanf(%d,x);
25 if (xB) q[i]0,q2[i]0,ans[i]a[x]; else q[i]0,q2[i]x;
26 }
27 }
28 for (int in; i; i--){
29 if (q[i]) fa[q2[i]]q2[i]1;
30 else if (q2[i]){
31 ans[i]M1;
32 for (int j0; jM; jq2[i])
33 if (get(j)M) ans[i]min(ans[i],get(j)-j);
34 }
35 }
36 rep(i,1,n) if (!q[i]) printf(%d\n,ans[i]);
37 return 0;
38 } 转载于:https://www.cnblogs.com/HocRiser/p/9907278.html