BZOJ4320 ShangHai2006 Homework(分块+并查集)
2024-09-01 18:59:38
考虑根号分块。对于<√3e5的模数,每加入一个数就暴力更新最小值;对于>√3e5的模数,由于最多被分成√3e5块,查询时对每一块找最小值,这用一些正常的DS显然可以做到log,但不太跑得过。考虑并查集在序列上的奇技淫巧。加点不太能做,考虑离线改成删点。并查集维护下一个未删除的点即可。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
int read()
{
int x=,f=;char c=getchar();
while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
}
#define N 100010
#define M 300000
int m,n,q,a[N],b[N],mn[N],ans[N],fa[N*];
bool flag[N*];
const int block=;
int find(int x){return fa[x]==x?x:fa[x]=find(fa[x]);}
int main()
{
#ifndef ONLINE_JUDGE
freopen("bzoj4320.in","r",stdin);
freopen("bzoj4320.out","w",stdout);
const char LL[]="%I64d\n";
#else
const char LL[]="%lld\n";
#endif
m=read();
for (int i=;i<=block;i++) mn[i]=i;
while (m--)
{
char c=getchar();while (c!='A'&&c!='B') c=getchar();
a[++n]=read();
if (c=='A')
{
b[n]=;flag[a[n]]=;
for (int i=;i<=block;i++)
mn[i]=min(mn[i],a[n]%i);
}
else if (a[n]<=block) ans[n]=mn[a[n]];
}
fa[M+]=M+;
for (int i=M;i>=;i--) if (flag[i]) fa[i]=i;else fa[i]=fa[i+];
for (int i=n;i>=;i--)
if (b[i]) fa[a[i]]=find(a[i]+);
else if (a[i]>block)
{
ans[i]=M+;
for (int j=;j<=M;j+=a[i])
{
int p=find(j);
if (p<min(j+a[i],M+)) ans[i]=min(ans[i],p%a[i]);
}
}
for (int i=;i<=n;i++) if (!b[i]) printf("%d\n",ans[i]);
return ;
}
最新文章
- MyEclipse 及Tomcate 安装 配置
- 过滤器中的chain.doFilter(request,response)
- C++ ODB 框架(未实践使用)
- 禁用gridview默认点击效果
- HDU-4515 小Q系列故事——世界上最遥远的距离
- Mirantis Certification summary
- Delphi启动/停止Windows服务,启动类型修改为";自动";
- oracle_constraint的用处
- 2016年团体程序设计天梯赛-决赛 L1-8. Left-pad(20)
- 使用clone
- MyBatis与MySQL交互
- Thread.yield和join方法
- 消息队列(MQ)
- MVC Scaffolding SmartCode-Engine 更新
- python(十一)面向切面编程AOP和装饰器
- mysql配置utf8_mb4
- HDU 4612 Warm up (边双连通分量+缩点+树的直径)
- mysql时间日期函数总结(转)
- 字符串匹配的KMP算法-16张图片看明白
- List原理
热门文章
- frame3.5安装出错
- 浅谈linux系统中pdf文件的默认打开方式
- 主流浏览器内核,以及CSS3前缀识别码
- zookeeper环境搭建(Linux)
- BZOJ:2038: [2009国家集训队]小Z的袜子(hose)(莫队算法模板)
- python2.7练习小例子(二十五)
- [Jmeter]jmeter数据库性能测试配置
- python语法图
- 【廖雪峰老师python教程】——map/reduce
- 虚拟现实-VR-UE4-创建第一个C++项目——Hello word