[BZOJ4320][ShangHai2006]Homework(根号分治+并查集)
对于<=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(根号分治+并查集)相关推荐
- CodeForces - 1217F Forced Online Queries Problem(线段树分治+并查集撤销)
题目链接:点击查看 题目大意:给出 nnn 个点,初始时互相不存在连边,需要执行 mmm 次操作,每次操作分为两种类型: 1xy1 \ x \ y1 x y:如果 (x,y)(x,y)(x,y) 之间 ...
- 牛客多校8 - All-Star Game(线段树分治+并查集按秩合并的撤销操作)
题目链接:点击查看 题目大意:有 n 个球员和 m 个球迷,一个球员可能是多个球迷的粉丝,需要选择最少的球员进行比赛,使得所有的球迷都愿意观看(对于每个球迷来说,都有至少一个其喜欢的球员入选比赛) 对 ...
- 【XSY2469】graph 分治 并查集
题目大意 给你一张\(n\)个点\(m\)条边的无向图,问删去每个点后,原图是不是二分图. \(n,m\leq 100000\) 题解 一个图是二分图\(\Longleftrightarrow\)该图 ...
- 越野赛车问题——线段树分治+并查集
题目 [题目描述] 小 $H$ 是一位优秀的越野赛车女选手.现在她准备在 $A$ 山上进行赛车训练. $A$ 山上一共有 $n$ 个广场,编号依次为 $1$ 到 $n$ ,这些广场之间通过 $n-1$ ...
- BZOJ 1018: [SHOI2008]堵塞的交通traffic(线段树分治+并查集)
传送门 解题思路 可以离线,然后确定每个边的出现时间,算这个排序即可.然后就可以线段树分治了,连通性用并查集维护,因为要撤销,所以要按秩合并,时间复杂度\(O(nlog^2 n)\) 代码 #incl ...
- bzoj4025-二分图【线段树分治,并查集】
正题 题目链接:https://darkbzoj.tk/problem/4025 题目大意 nnn个点mmm条边,每条边会在一个TTT以内的时间段内出现,对于任意一个TTT以内的时刻求图是否是一个二分 ...
- Codeforces 1140F 线段树 分治 并查集
题意及思路:https://blog.csdn.net/u013534123/article/details/89010251 之前cf有一个和这个相似的题,不过那个题只有合并操作,没有删除操作,直接 ...
- 【CF603E】Pastoral Oddities cdq分治+并查集
[CF603E]Pastoral Oddities 题意:有n个点,依次加入m条边权为$l_i$的无向边,每次加入后询问:当前图是否存在一个生成子图,满足所有点的度数都是奇数.如果有,输出这个生成子图 ...
- 线段树分治 ---- F. Extending Set of Points(线段树分治 + 可撤销并查集)
题目链接 题目大意: 你有个点集合SSS,每次往集合里面加点或者删点(如果要加的点出现过),如果(x1,y1),(x2,y1),(x1,y2),(x2,y2)(x1,y1),(x2,y1),(x1,y ...
最新文章
- python和R对dataframe的单列数据进行统计:value_counts、table、unique、nunique、min、max、mean、sort、length、var、quantile、
- 什么电线适合在面包板上布线?
- 闲谈嵌入式的复杂性2
- 121. Leetcode 5. 最长回文子串 (动态规划-子序列问题)
- 数据中心液体冷却技术的五个主要关注点
- 【图像分割模型】实例分割模型—DeepMask
- c# 找出目录下的所有子目录_Linux操作系统文件目录
- IntelliJ IDEA中日志分类显示设置
- 前端学习(2585):前端怎么在响应头和请求头里面拿数据?
- 深度学习三(PyTorch物体检测实战)
- python2中range和xrange的区别
- mysql注入多语句执行_MySQL注入总结MySQL暴错注入方法整理
- Python多线程好玩弹窗代码
- 数字信号处理重要学习资源
- (哈希)Squares (p2002)
- Linux中国对话龙蜥社区4位理事:龙蜥操作系统捐赠的背后,是谁在推动?
- USB 设备无法识别故障的排除
- Java面试必懂知识点总结
- 逻辑回归算法 - 乳腺癌预测
- 主板噪音测试软件,音效网络突出 综合表现不俗_技嘉 G1.Sniper B6_主板评测-中关村在线...
热门文章
- java什么是重构 何时使用重构_Java 之重构现有系统实战(一)
- matlab求迟滞,MATLAB PI迟滞模型问题
- 『操作系统』 进程的描述与控制 Part3 管程
- 图书馆管理系统用户端心得
- gEdit: 打造简洁,小巧的编程环境
- 投影仪投影粉色_DecisionTreeRegressor —停止用于将来的投影!
- opencv 分割边界_电影观众:场景边界分割
- 你是信用卡卡奴吗?怎么摆脱卡奴?
- 蜕变与成长中的青春创作:评论家谈少数民族青年作家的创作
- 新体验小说:作家重新卷入当代历史的一种方式——纪念“新体验小说”倡导一周...