【BZOJ4320】ShangHai2006 Homework

Description

  1:在人物集合 S 中加入一个新的程序员,其代号为 X,保证 X 在当前集合中不存在。 
  2:在当前的人物集合中询问程序员的mod Y 最小的值。 (为什么统计这个?因为拯救过世界的人太多了,只能取模) 

Input

第一行为用空格隔开的一个个正整数 N。 
接下来有 N 行,若该行第一个字符为“A” ,则表示操作 1;若为“B”,表示操作 2; 
其中 对于 100%的数据:N≤100000, 1≤X,Y≤300000,保证第二行为操作 1。 

Output

对于操作 2,每行输出一个合法答案。 

Sample Input

5
A 3
A 5
B 6
A 9
B 4

Sample Output

3
1

HINT

【样例说明】 
  在第三行的操作前,集合里有 3、5 两个代号,此时 mod 6 最小的值是 3 mod 6 = 3; 
  在第五行的操作前,集合里有 3、5、9,此时 mod 4 最小的值是 5 mod 4 = 1; 

题解:第一眼看题就想到分段,看题解要用并查集一下子就怂了,不过点进去之后发现还是分段。。。

设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 分段+并查集的更多相关文章

  1. [BZOJ4320][ShangHai2006]Homework(根号分治+并查集)

    对于<=sqrt(300000)的询问,对每个模数直接记录结果,每次加入新数时暴力更新每个模数的结果. 对于>sqrt(300000)的询问,枚举倍数,每次查询大于等于这个倍数的最小数是多 ...

  2. BZOJ4320 ShangHai2006 Homework(分块+并查集)

    考虑根号分块.对于<√3e5的模数,每加入一个数就暴力更新最小值:对于>√3e5的模数,由于最多被分成√3e5块,查询时对每一块找最小值,这用一些正常的DS显然可以做到log,但不太跑得过 ...

  3. BZOJ4320 : ShangHai2006 Homework

    取$M=\sqrt{300000}$. 设$g[i]$表示程序员的$\bmod i$最小的值. 若$Y<M$,那么可以在$O(M)$时间内完成对所有$g[i]$的修改,$O(1)$时间内完成查询 ...

  4. 【bzoj4320】【ShangHai2006 Homework】【并查集+离线处理】

    ShangHai2006 Homework Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 918  Solved: 460[Submit][Statu ...

  5. 【bzoj4320】ShangHai2006 Homework

    若Y小于等于sqrt(300000),暴力,对所有的插入的数都更新mn[i]. 若Y大于sqrt(300000),枚举kY,用并查集维护>=i的第一个数,这样只支持删除操作是O(1),然后倒着枚 ...

  6. bzoj 4320: ShangHai2006 Homework

    4320: ShangHai2006 Homework Time Limit: 10 Sec Memory Limit: 128 MB Description 1:在人物集合 S 中加入一个新的程序员 ...

  7. POJ 1456 (贪心+并查集) Supermarket

    有n件商品,每件商品有它的利润和售出的最后期限,问能够得到的最大利润是多少 这道题和 HDU 1789 Doing Homework again 几乎一模一样,只不过这个是求最的扣分,本题是求最大利润 ...

  8. hdu6109(并查集+set/倍增)

    题目 http://acm.hdu.edu.cn/showproblem.php?pid=6109 分析 对于相同的条件,明显直接并查集 对于不同的条件,可以用set来保存,并查集合并的时候也要对se ...

  9. 【BZOJ2342】双倍回文(manacher,并查集)

    题意: 思路:From http://blog.sina.com.cn/s/blog_8d5d2f04010196bh.html 首先我可以看出: (1)我们找到的串的本身也是一个回文串(显然) (2 ...

随机推荐

  1. form的action属性作用

    一.action=""和action="#".没有action属性的作用相同,都是提交到当前页面(也就是document.location.href) 二.ac ...

  2. iOS常用第三方库大全,史上最全第三方库收集

    下拉刷新 EGOTableViewPullRefresh – 最早的下拉刷新控件. SVPullToRefresh – 下拉刷新控件. MJRefresh – 仅需一行代码就可以为UITableVie ...

  3. Shell--变量的显示与设置、环境变量、语系变量

    1.变量的显示与设置:echo,unsetecho:显示一段文字,也可以读出变量内容并打印出来  格式echo $变量或者echo ${变量}语 法:echo [-neE][字符串]或 echo [- ...

  4. Hadoop部署记录

    1.准备Linux环境 1.0先将虚拟机的网络模式选为NAT 1.1修改主机名 vi /etc/sysconfig/network NETWORKING=yes HOSTNAME=node1 ### ...

  5. 9.11排序与查找(一)——给定两个排序后的数组A和B,当中A的末端有足够的缓冲空间容纳B。将B合并入A并排序

    /**  * 功能:给定两个排序后的数组A和B,当中A的末端有足够的缓冲空间容纳B.将B合并入A并排序. */ /** * 问题:假设将元素插入数组A的前端,就必须将原有的元素向后移动,以腾出空间. ...

  6. 页面加载后累加,自加1&&判断数字是否为两位数

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. python项目导出所需要的依赖库

    使用pip freeze $ pip freeze > requirements.txt 这种方式是把整个环境中的包都列出来了,如果是虚拟环境可以使用. 通常情况下我们只需要导出当前项目的req ...

  8. Highcharts使用二维数组生成图表

    Highcharts使用二维数组生成图表 二维数组是更为灵活的一种数据存储方式.在Highcharts中.能够使用配置项column和rows二维数组.对于使用columns构建的二维数组,Highc ...

  9. <转>创建支持eclipse的多模块maven项目

    如何使用eclipse创建Maven工程及其子模块 1,首先创建一个父类工程   子模块继承父类工程      并在父类工程的pom.xml文件中定义引入的jar及其版本号     子模块可以引用 2 ...

  10. react-native 调用第三方 SDK

    步骤一:android 文件修改 (1)In android/settings.gradle ... include ':VoiceModule', ':app' project(':VoiceMod ...