ShangHai2006 Homework

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 918  Solved: 460
[Submit][Status][Discuss]

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; 

1.插入一个数X 
2.询问所有数 mod Y的最小值

将询问按照Y≤3∗105−−−−−√和Y>3∗105−−−−−√两种分类

Y≤3∗105−−−−−√:开一个数组ansY代表当询问为Y的时候的答案,每插入一个数枚举1≤i≤3∗105−−−−−√用X mod i更新ansi

Y>3∗105−−−−−√:枚举Y的倍数kY,对于每个kY我们需要找到集合中大于等于kY的数中最小的那个 
log系列显然会T 
考虑并查集,类似于花神游历各国那个题一样,我们可以利用并查集完成【删除一个数,迅速找到一个位置后面第一个没有被删除的数】 
但是这个题是插入一个数啊? 
倒着做就行了

 #include<cstring>
#include<cmath>
#include<algorithm>
#include<iostream>
#include<cstdio> #define T 300007
#define B 507
#define M 300007
#define ll long long
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(ch>''||ch<''){if (ch=='-') f=-;ch=getchar();}
while(ch<=''&&ch>=''){x=(x<<)+(x<<)+ch-'';ch=getchar();}
return x*f;
} int n;
int fa[M],opt[M],num[M];
int mn[M],ans[M]; int find(int x)
{
return fa[x]==x?fa[x]:fa[x]=find(fa[x]);
}
int main()
{
scanf("%d",&n);
memset(mn,,sizeof(mn));
for(int i=;i<=T;i++)fa[i]=i+;
for(int i=;i<=n;i++)
{
char s[];
scanf("%s%d",s,&num[i]);
opt[i]=s[]-'A';
if(opt[i]==)
{
for(int j=;j<=B;j++)
mn[j]=min(mn[j],num[i]%j);
fa[num[i]]=num[i];
}
else if(num[i]<=B) ans[i]=mn[num[i]];
}
for(int i=n;i;i--)
{
if(opt[i]==)
fa[num[i]]=fa[num[i]+];
else if(num[i]>B)
{
ans[i]=find()%num[i];
for(int j=num[i];j<=T;j+=num[i])
{
int x=find(fa[j]);
if(x)ans[i]=min(ans[i],x%num[i]);
}
}
}
for(int i=;i<=n;i++)
if(opt[i]==)
printf("%d\n",ans[i]);
}

【bzoj4320】【ShangHai2006 Homework】【并查集+离线处理】的更多相关文章

  1. ACM: hdu 1811 Rank of Tetris - 拓扑排序-并查集-离线

    hdu 1811 Rank of Tetris Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & % ...

  2. BZOJ5188: [Usaco2018 Jan]MooTube 并查集+离线处理

    BZOJ又不给题面... Luogu的翻译看不下去... 题意简述 有一个$n$个节点的树,边有权值,定义两个节点之间的距离为两点之间的路径上的最小边权 给你$Q$个询问,问你与点$v$的距离超过$k ...

  3. poj 2528 Mayor's posters 线段树 || 并查集 离线处理

    题目链接 题意 用不同颜色的线段覆盖数轴,问最终数轴上有多少种颜色? 注:只有最上面的线段能够被看到:即,如果有一条线段被其他的线段给完全覆盖住,则这个颜色是看不到的. 法一:线段树 按题意按顺序模拟 ...

  4. ACM学习历程—SNNUOJ 1110 传输网络((并查集 && 离线) || (线段树 && 时间戳))(2015陕西省大学生程序设计竞赛D题)

    Description Byteland国家的网络单向传输系统可以被看成是以首都 Bytetown为中心的有向树,一开始只有Bytetown建有基站,所有其他城市的信号都是从Bytetown传输过来的 ...

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

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

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

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

  7. zoj3261 并查集离线处理

    Connections in Galaxy War Time Limit:3000MS     Memory Limit:32768KB     64bit IO Format:%lld & ...

  8. BZOJ-1015 StarWar星球大战 并查集+离线处理

    1015: [JSOI2008]星球大战starwar Time Limit: 3 Sec Memory Limit: 162 MB Submit: 4105 Solved: 1826 [Submit ...

  9. 【BZOJ】1015 [JSOI2008]星球大战starwar(并查集+离线处理)

    Description 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球通过 ...

随机推荐

  1. VC操作WORD文档总结

    一.写在开头 最近研究word文档的解析技术,我本身是VC的忠实用户,看到C#里面操作WORD这么舒服,同时也看到单位有一些需求,就想尝试一下,结果没想到里面的技术点真不少,同时网络上的共享资料很多, ...

  2. HDU 4003 Find Metal Mineral (树形DP,经典)

    题意:给定一棵树图,n个节点,有边权,要派k<11个机器人从节点s出发,遍历所有的点,每当1只机器人经过1条边时就会花费该边的边权,边是可重复走的.问遍历完所有点的最小花费? 思路: 非常经典, ...

  3. SQLite基础教程目录

    SQLite基础教程目录 SQLite主页 SQLite概述 SQLite -安装 SQLite -命令 SQLite -语法 SQLite -数据类型 SQLite -创建数据库 SQLite -附 ...

  4. getpwuid和getpwnam的用法

    如果知道一个用户的用户ID或者登录名,可以通过getpwuid或getpwnam函数获得用户的登录信息.函数原型为:         #include <pwd.h> #include & ...

  5. PAT (Basic Level) Practise (中文)-1034. 有理数四则运算(20)

    PAT (Basic Level) Practise (中文)-1034. 有理数四则运算(20)  http://www.patest.cn/contests/pat-b-practise/1034 ...

  6. Bootstrap 翻页(pager)

    如果您想要创建一个简单的分页链接为用户提供导航,可以通过翻页来实现.与分布链接一样,也是一个无序列表.默认情况下,翻页是居中显示的.下面列出了bootstrap处理翻页的类. Class 描述 示例代 ...

  7. Spring框架xml配置文件 复杂类型属性注入——数组 list map properties DI dependency injection 依赖注入——属性值的注入依赖于建立的对象(堆空间)

    Person类中的各种属性写法如下: package com.swift.person; import java.util.Arrays; import java.util.List; import ...

  8. 【转】pycharm使用中的一些快捷键

    正在使用pycharm,发现多行注释以及大块代码格式化的时候却急于没有快捷方式,于是百度了一下,恰好看到这位博主的总结,大部分我使用的不多,不过还是全部粘了过来,以备将来不时之需. [转载]博主地址链 ...

  9. 对于Nginx+PHP实现大文件上传时候需要修改的参数

    post_max_size表示POST表单提交的最大大小upload_max_filesize 表示文件上传的最大大小. 通常post_max_size设置的值必须必upload_max_filesi ...

  10. golang 实现冒泡排序

    package main import ( "fmt" ) func main(){ a := [...] int{2,5,9,6,8} fmt.Println(a) num := ...