【BZOJ4320】ShangHai2006 Homework 分段+并查集
【BZOJ4320】ShangHai2006 Homework
Description
Input
Output
Sample Input
A 3
A 5
B 6
A 9
B 4
Sample Output
1
HINT
题解:第一眼看题就想到分段,看题解要用并查集一下子就怂了,不过点进去之后发现还是分段。。。
设m表示x的最大值,对于y<=sqrt(m)的询问,我们可以开个桶,每次暴力维护,对于y>sqrt(m)的询问,我们可以枚举(x/y)*y的位置,然后找到比它大的,最近的x,这就要用到并查集。考虑离线处理,将加点变成删点,每删除一个点就相当于把两个小区间合并。我们查找的时候找的就是区间的右端点。
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
int n,m,siz;
int f[300010],ans[100010],q[100010],vis[300010],st[410];
char str[10];
int find(int x)
{
return (f[x]==x)?x:(f[x]=find(f[x]));
}
int main()
{
scanf("%d",&n);
siz=400;
int i,j;
memset(st,0x3f,sizeof(st));
for(i=1;i<=n;i++)
{
scanf("%s%d",str,&q[i]);
if(str[0]=='A')
{
for(j=1;j<=siz;j++) st[j]=min(st[j],q[i]%j);
m=max(m,q[i]),vis[q[i]]=1,q[i]=-q[i];
}
else if(q[i]<=siz) ans[i]=st[q[i]];
}
for(i=0;i<=m+1;i++) f[i]=(vis[i])?i:i+1;
for(i=n;i>=1;i--)
{
if(q[i]<0) f[-q[i]]=find(-q[i]+1);
else
{
if(q[i]>siz)
{
ans[i]=1<<30;
for(j=0;j<=m;j+=q[i]) ans[i]=min(ans[i],find(j)%q[i]);
}
}
}
for(i=1;i<=n;i++) if(q[i]>0) printf("%d\n",ans[i]);
return 0;
}
【BZOJ4320】ShangHai2006 Homework 分段+并查集的更多相关文章
- [BZOJ4320][ShangHai2006]Homework(根号分治+并查集)
对于<=sqrt(300000)的询问,对每个模数直接记录结果,每次加入新数时暴力更新每个模数的结果. 对于>sqrt(300000)的询问,枚举倍数,每次查询大于等于这个倍数的最小数是多 ...
- BZOJ4320 ShangHai2006 Homework(分块+并查集)
考虑根号分块.对于<√3e5的模数,每加入一个数就暴力更新最小值:对于>√3e5的模数,由于最多被分成√3e5块,查询时对每一块找最小值,这用一些正常的DS显然可以做到log,但不太跑得过 ...
- BZOJ4320 : ShangHai2006 Homework
取$M=\sqrt{300000}$. 设$g[i]$表示程序员的$\bmod i$最小的值. 若$Y<M$,那么可以在$O(M)$时间内完成对所有$g[i]$的修改,$O(1)$时间内完成查询 ...
- 【bzoj4320】【ShangHai2006 Homework】【并查集+离线处理】
ShangHai2006 Homework Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 918 Solved: 460[Submit][Statu ...
- 【bzoj4320】ShangHai2006 Homework
若Y小于等于sqrt(300000),暴力,对所有的插入的数都更新mn[i]. 若Y大于sqrt(300000),枚举kY,用并查集维护>=i的第一个数,这样只支持删除操作是O(1),然后倒着枚 ...
- bzoj 4320: ShangHai2006 Homework
4320: ShangHai2006 Homework Time Limit: 10 Sec Memory Limit: 128 MB Description 1:在人物集合 S 中加入一个新的程序员 ...
- POJ 1456 (贪心+并查集) Supermarket
有n件商品,每件商品有它的利润和售出的最后期限,问能够得到的最大利润是多少 这道题和 HDU 1789 Doing Homework again 几乎一模一样,只不过这个是求最的扣分,本题是求最大利润 ...
- hdu6109(并查集+set/倍增)
题目 http://acm.hdu.edu.cn/showproblem.php?pid=6109 分析 对于相同的条件,明显直接并查集 对于不同的条件,可以用set来保存,并查集合并的时候也要对se ...
- 【BZOJ2342】双倍回文(manacher,并查集)
题意: 思路:From http://blog.sina.com.cn/s/blog_8d5d2f04010196bh.html 首先我可以看出: (1)我们找到的串的本身也是一个回文串(显然) (2 ...
随机推荐
- iOS:自定义模态动画 --UIPresentationController
UIPresentationController :展示控制器,是iOS8的一个新特性,用来展示模态窗口的.它是所有模态控制器的管理者. 即: 1> 管理所有Modal出来的控制器 2> ...
- java GC optimization, G1GC
引用 http://www.avricot.com/blog/?post/2010/05/03/Get-started-with-java-JVM-memory-(heap%2C-stack%2 ...
- vs2010 编译多个project问题
使用VS2010 编译从vc6.0复制过来的原project文件源代码.提示错误非常多.感觉无从下手.非常多原始的函数和API參数都提示类型 错误或者不兼容. 百度一下.第一个问题: vc6.0使用A ...
- IDEA搭建maven项目
新建 新建maven项目.create from archetype.选择maven-archetype-webapp Next.填写GroupId,ArtifactId和Version attnam ...
- ionic开发之优化目录结构
当我们来个ionic start circleApp tabs的时候,会自动生成目录结构,基本如下: 显然这不利于项目的管理,当你的项目越来越复杂的时候,这是不够的.我们必须要按照模块进行文件夹的方式 ...
- ddmrp
DDMRP 特点 在供应链加入 mts 缓冲,解耦 lead time, 缩小 bullwhip 效应,最小化库存 buffer动态调整 buffer 分3个颜色共 4个区域[zone],为 gree ...
- ASP.NET CORE RAZOR :在 ASP.NET Core 中开始使用 Razor Pages
来自:https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/razor-pages/razor-pages-start 系统必备安装以下组件:. ...
- [redis]redis概述
Redis是一个开源.支持网络.基于内存.可持久化的日志型.key-value键值对数据库.使用ANSI C编写.并提供多种语言的API. 它是远程字典server(remote dictionary ...
- .Vue 文件 ES6 语法 webstorm 中的一个识别Bug
webstorm 2017 版本中即使安装了vue template file 设置了 js 语言为 es6 语法仍旧会出现识别不了划线的情况,苦寻很久,最后解决方式如下 <script typ ...
- iOS swift 给MBProgressHUD添加分类
MBProgressHUD在开发中经常会用到,今天把MBProgressHUD的方法拓展了一下,更加方便使用 1.可以实现gif图片的展示,使用时请替换test.gif 2.可以控制是否允许交互,如果 ...