首先我们注意到ai<=50w

因为2*3*5*7*11*13*17=510510

所以其最多含有6个质因子

我们将每个数的贡献分离,

添加就等于加上了跟这个数相关的互素对

删除就等于减去了跟这个数相关的互素对

问题转化为了求跟某个数相关的互素对的数目

我们可以用容斥来解决

即加上至少跟这个数有0个公共质因子的数

减去至少跟这个数有1个公共质因子的数

加上至少跟这个数又2个公共质因子的数……

这样我们就可以在2^6的时间算出答案了

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<vector>
#include<cmath>
using namespace std; typedef long long LL;
const int maxn=200010;
int n,m,x,tot;
int a[maxn];
bool check[maxn];
vector<int>V[maxn];
int p[500010],cnt=0;
bool vis[500010];
int Num[500010];
LL ans=0; void Get_Prime(){
for(int i=2;i<=500000;++i){
if(!vis[i])p[++cnt]=i;
for(int j=1;j<=cnt;++j){
if(1LL*p[j]*i>500000)break;
vis[p[j]*i]=true;
if(i%p[j]==0)break;
}
}return;
}
void push(int now){
int x=a[now],lim=(int)(sqrt(x));
for(int i=1;i<=cnt;++i){
if(p[i]>lim)break;
if(x%p[i]==0){
V[now].push_back(p[i]);
while(x%p[i]==0)x/=p[i];
if(x==1)break;
}
}
if(x>1)V[now].push_back(x);
}
void add(int now){
int k=V[now].size();
for(int i=0;i<(1<<k);++i){
int bit=0,o=1;
for(int j=0;j<k;++j)if(i>>j&1)bit++,o*=V[now][j];
if(bit&1)ans-=Num[o];
else ans+=Num[o];
Num[o]++;
}return;
}
void del(int now){
int k=V[now].size();
for(int i=0;i<(1<<k);++i){
int bit=0,o=1;
for(int j=0;j<k;++j)if(i>>j&1)bit++,o*=V[now][j];
Num[o]--;
if(bit&1)ans+=Num[o];
else ans-=Num[o];
}return;
} int main(){
scanf("%d%d",&n,&m);
Get_Prime();
for(int i=1;i<=n;++i)scanf("%d",&a[i]),push(i);
for(int i=1;i<=m;++i){
scanf("%d",&x);
if(check[x])del(x),check[x]=false;
else add(x),check[x]=true;
cout<<ans<<endl;
}return 0; }

  

codeforces #305 C Mike and Foam的更多相关文章

  1. Codeforces 547C/548E - Mike and Foam 题解

    目录 Codeforces 547C/548E - Mike and Foam 题解 前置芝士 - 容斥原理 题意 想法(口胡) 做法 程序 感谢 Codeforces 547C/548E - Mik ...

  2. codeforces #305 A Mike and Frog

    挺简单的题目,但是有一堆恶心的边界 在刨去恶心的边界之后: 假定我们知道两边的循环节为b1,b2 其中h第一次到达目标的时间为a1,a2 又知道对于答案t t=a1+b1*t1=a2+b2*t2 不妨 ...

  3. codeforces #305 B Mike and Feet

    跟之前做过的51Nod的移数博弈是一样的QAQ 我们考虑每个数的贡献 定义其左边第一个比他小的数的位置为L 定义其右边第一个比他小的数的位置为R 这个可以用排序+链表 或者 单调队列 搞定 那么对于区 ...

  4. codeforces #305 D Mike and Fish

    正解貌似是大暴搜? 首先我们考虑这是一个二分图,建立网络流模型后很容易得出一个算法 S->行 容量为Num[X]/2; 行->列 容量为1 且要求(x,y)这个点存在 列->T 容量 ...

  5. codeforces #305 E Mike and friends

    原问题可以转化为:给定第k个字符串,求它在L-R的字符串里作为子串出现了多少次 定义子串为字符串的某个前缀的某个后缀(废话) 等价于我们把一个字符串插入到trie里,其过程中每个经过的节点和其向上的f ...

  6. hdu4135-Co-prime & Codeforces 547C Mike and Foam (容斥原理)

    hdu4135 求[L,R]范围内与N互质的数的个数. 分别求[1,L]和[1,R]和n互质的个数,求差. 利用容斥原理求解. 二进制枚举每一种质数的组合,奇加偶减. #include <bit ...

  7. cf#305 Mike and Foam(容斥)

    C. Mike and Foam time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...

  8. E. Mike and Foam(容斥原理)

    E. Mike and Foam Mike is a bartender at Rico's bar. At Rico's, they put beer glasses in a special sh ...

  9. codeforces 547c// Mike and Foam// Codeforces Round #305(Div. 1)

    题意:给出数组arr和一个空数组dst.从arr中取出一个元素到dst为一次操作.问每次操作后dst数组中gcd等于1的组合数.由于数据都小于10^6,先将10^6以下的数分解质因数.具体来说从2开始 ...

随机推荐

  1. 四、Sql Server 基础培训《进度4-插入数据(实际操作)》

    知识点: 假设有订单表 CREATE TABLE Order ( ID int identity(1,1) not null primary key, --内码 BillNo varchar(100) ...

  2. Relation Extraction中SVM分类样例unbalance data问题解决 -松弛变量与惩罚因子

    转载自:http://blog.csdn.net/yangliuy/article/details/8152390 1.问题描述 做关系抽取就是要从产品评论中抽取出描述产品特征项的target短语以及 ...

  3. 解决 nginx 出现 413 Request Entity Too Large 的问题

    1.若nginx用所用的 php 请求解析服务是 fpm, 则检查 /etc/php5/fpm/php.ini 文件中的参数 upload_max_filesize = 20M post_max_si ...

  4. JavaSE assert断言的学习

    在Java中,assert关键字是从JAVA SE 1.4 引入的,为了避免和老版本的Java代码中使用了assert关键字导致错误,Java在执行的时候默认是不启动断言检查的(这个时候,所有的断言语 ...

  5. mysql中的多表查询

    基本模式:t1 CROSS JOIN t2, t1 INNER JOIN T2 ON ,以及LEFTJOIN 和RIGHT JOIN. 这些都需要在实践中使用,多练习才行. 写一句sql语句:SELE ...

  6. Lucene入门学习二

    接上篇:增删改查 增加:这里不做过多阐述. 删除:删除全部,根据条件删除 修该:先删除,后添加 查询(*):查询所有,精确查询,根据数值范围查询,组合查询,解析查询. package com.ithe ...

  7. C 输出变量值到文件中的方法

    LinphoneChatMessage *message FILE *fpt; fpt = fopen("wendangming.txt", "w");//打开 ...

  8. 日志系统的 ELK 的搭建

    https://www.cnblogs.com/yuhuLin/p/7018858.html 快速搭建ELK日志分析系统 一.ELK搭建篇 官网地址:https://www.elastic.co/cn ...

  9. 黑盒测试实践——day01

    一.任务进展情况 小组成员讨论了测试案例的选取以及测试工具的选取,目前正在设计合理的测试方法,研究待测试系统的功能需求和缺陷. 二.存在的问题 测试工具的使用还是不很清楚. 三.解决方法 通过上网搜集 ...

  10. 完整java开发中JDBC连接数据库代码和步骤[申明:来源于网络]

    完整java开发中JDBC连接数据库代码和步骤[申明:来源于网络] 地址:http://blog.csdn.net/qq_35101189/article/details/53729720?ref=m ...