对于<=sqrt(300000)的询问,对每个模数直接记录结果,每次加入新数时暴力更新每个模数的结果。

对于>sqrt(300000)的询问,枚举倍数,每次查询大于等于这个倍数的最小数是多少,这个操作通过将询问逆序使用并查集支持。

 1 #include<cstdio>
 2 #include<algorithm>
 3 #define rep(i,l,r) for (int i=(l); i<=(r); i++)
 4 using namespace std;
 5
 6 const int N=300010,M=300000,B=550;
 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]=i+1; fa[M+1]=M+1;
16     rep(i,1,B) a[i]=i+1;
17     rep(i,1,n){
18         scanf(" %c",&ch);
19         if (ch=='A'){
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 (x<=B) q[i]=0,q2[i]=0,ans[i]=a[x]; else q[i]=0,q2[i]=x;
26         }
27     }
28     for (int i=n; i; i--){
29         if (q[i]) fa[q2[i]]=q2[i]+1;
30         else if (q2[i]){
31             ans[i]=M+1;
32             for (int j=0; j<=M; j+=q2[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

[BZOJ4320][ShangHai2006]Homework(根号分治+并查集)相关推荐

  1. CodeForces - 1217F Forced Online Queries Problem(线段树分治+并查集撤销)

    题目链接:点击查看 题目大意:给出 nnn 个点,初始时互相不存在连边,需要执行 mmm 次操作,每次操作分为两种类型: 1xy1 \ x \ y1 x y:如果 (x,y)(x,y)(x,y) 之间 ...

  2. 牛客多校8 - All-Star Game(线段树分治+并查集按秩合并的撤销操作)

    题目链接:点击查看 题目大意:有 n 个球员和 m 个球迷,一个球员可能是多个球迷的粉丝,需要选择最少的球员进行比赛,使得所有的球迷都愿意观看(对于每个球迷来说,都有至少一个其喜欢的球员入选比赛) 对 ...

  3. 【XSY2469】graph 分治 并查集

    题目大意 给你一张\(n\)个点\(m\)条边的无向图,问删去每个点后,原图是不是二分图. \(n,m\leq 100000\) 题解 一个图是二分图\(\Longleftrightarrow\)该图 ...

  4. 越野赛车问题——线段树分治+并查集

    题目 [题目描述] 小 $H$ 是一位优秀的越野赛车女选手.现在她准备在 $A$ 山上进行赛车训练. $A$ 山上一共有 $n$ 个广场,编号依次为 $1$ 到 $n$ ,这些广场之间通过 $n-1$ ...

  5. BZOJ 1018: [SHOI2008]堵塞的交通traffic(线段树分治+并查集)

    传送门 解题思路 可以离线,然后确定每个边的出现时间,算这个排序即可.然后就可以线段树分治了,连通性用并查集维护,因为要撤销,所以要按秩合并,时间复杂度\(O(nlog^2 n)\) 代码 #incl ...

  6. bzoj4025-二分图【线段树分治,并查集】

    正题 题目链接:https://darkbzoj.tk/problem/4025 题目大意 nnn个点mmm条边,每条边会在一个TTT以内的时间段内出现,对于任意一个TTT以内的时刻求图是否是一个二分 ...

  7. Codeforces 1140F 线段树 分治 并查集

    题意及思路:https://blog.csdn.net/u013534123/article/details/89010251 之前cf有一个和这个相似的题,不过那个题只有合并操作,没有删除操作,直接 ...

  8. 【CF603E】Pastoral Oddities cdq分治+并查集

    [CF603E]Pastoral Oddities 题意:有n个点,依次加入m条边权为$l_i$的无向边,每次加入后询问:当前图是否存在一个生成子图,满足所有点的度数都是奇数.如果有,输出这个生成子图 ...

  9. 线段树分治 ---- F. Extending Set of Points(线段树分治 + 可撤销并查集)

    题目链接 题目大意: 你有个点集合SSS,每次往集合里面加点或者删点(如果要加的点出现过),如果(x1,y1),(x2,y1),(x1,y2),(x2,y2)(x1,y1),(x2,y1),(x1,y ...

最新文章

  1. python和R对dataframe的单列数据进行统计:value_counts、table、unique、nunique、min、max、mean、sort、length、var、quantile、
  2. 什么电线适合在面包板上布线?
  3. 闲谈嵌入式的复杂性2
  4. 121. Leetcode 5. 最长回文子串 (动态规划-子序列问题)
  5. 数据中心液体冷却技术的五个主要关注点
  6. 【图像分割模型】实例分割模型—DeepMask
  7. c# 找出目录下的所有子目录_Linux操作系统文件目录
  8. IntelliJ IDEA中日志分类显示设置
  9. 前端学习(2585):前端怎么在响应头和请求头里面拿数据?
  10. 深度学习三(PyTorch物体检测实战)
  11. python2中range和xrange的区别
  12. mysql注入多语句执行_MySQL注入总结MySQL暴错注入方法整理
  13. Python多线程好玩弹窗代码
  14. 数字信号处理重要学习资源
  15. (哈希)Squares (p2002)
  16. Linux中国对话龙蜥社区4位理事:龙蜥操作系统捐赠的背后,是谁在推动?
  17. USB 设备无法识别故障的排除
  18. Java面试必懂知识点总结
  19. 逻辑回归算法 - 乳腺癌预测
  20. 主板噪音测试软件,音效网络突出 综合表现不俗_技嘉 G1.Sniper B6_主板评测-中关村在线...

热门文章

  1. java什么是重构 何时使用重构_Java 之重构现有系统实战(一)
  2. matlab求迟滞,MATLAB PI迟滞模型问题
  3. 『操作系统』 进程的描述与控制 Part3 管程
  4. 图书馆管理系统用户端心得
  5. gEdit: 打造简洁,小巧的编程环境
  6. 投影仪投影粉色_DecisionTreeRegressor —停止用于将来的投影!
  7. opencv 分割边界_电影观众:场景边界分割
  8. 你是信用卡卡奴吗?怎么摆脱卡奴?
  9. 蜕变与成长中的青春创作:评论家谈少数民族青年作家的创作
  10. 新体验小说:作家重新卷入当代历史的一种方式——纪念“新体验小说”倡导一周...