Codeforces 548E Mike ans Foam (与质数相关的容斥多半会用到莫比乌斯函数)
题面
链接:CF548E
Description
Mike is a bartender at Rico's bar. At Rico's, they put beer glasses in a special shelf. There are n kinds of beer at Rico's numbered from 1 to n. i-th kind of beer has a**i milliliters of foam on it.

Maxim is Mike's boss. Today he told Mike to perform q queries. Initially the shelf is empty. In each request, Maxim gives him a number x. If beer number x is already in the shelf, then Mike should remove it from the shelf, otherwise he should put it in the shelf.
After each query, Mike should tell him the score of the shelf. Bears are geeks. So they think that the score of a shelf is the number of pairs (i, j) of glasses in the shelf such that $i< j $and
where
is the greatest common divisor of numbers \(a\) and \(b\).
Mike is tired. So he asked you to help him in performing these requests.
Input
The first line of input contains numbers \(n\) and \(q (1 ≤ n, q ≤ 2 × 10^5)\), the number of different kinds of beer and number of queries.
The next line contains n space separated integers, \(a_1, a_2, ... , a_n (1 ≤ a_i ≤ 5 × 10^5)\), the height of foam in top of each kind of beer.
The next q lines contain the queries. Each query consists of a single integer integer x(1 ≤ x ≤ n), the index of a beer that should be added or removed from the shelf.
Output
For each query, print the answer for that query in one line.
Examples
| input | output |
|---|---|
| 5 6 1 2 3 4 6 1 2 3 4 5 1 |
0 1 3 5 6 2 |
题目分析
如题,用\(\mu\)进行容斥即可。
代码实现
#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<cstdio>
#include<iomanip>
#include<cstdlib>
#define MAXN 0x7fffffff
typedef long long LL;
const int N=500005;
using namespace std;
inline int Getint(){register int x=0,f=1;register char ch=getchar();while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}while(isdigit(ch)){x=x*10+ch-'0';ch=getchar();}return x*f;}
int prime[N],mu[N];
bool vis[N],chk[200005];
int a[200005],cnt[N];
int main(){
mu[1]=1;
for(int i=2;i<=5e5;i++){
if(!vis[i])prime[++prime[0]]=i,mu[i]=-1;
for(int j=1;j<=prime[0]&&i*prime[j]<=5e5;j++){
vis[i*prime[j]]=1;
if(i%prime[j]==0)break;
mu[i*prime[j]]=-mu[i];
}
}
int n=Getint(),q=Getint();
for(int i=1;i<=n;i++)a[i]=Getint();
LL ans=0;
for(int j=1;j<=q;j++){
int x=Getint(),ret=0;
if(!chk[x]){
chk[x]=1,x=a[x];
for(int i=1,lim=sqrt(x);i<=lim;i++){
if(x%i==0){
ret+=mu[i]*cnt[i],cnt[i]++;
if(i*i!=x)ret+=mu[x/i]*cnt[x/i],cnt[x/i]++;
}
}
ans+=ret;
}else{
chk[x]=0,x=a[x];
for(int i=1,lim=sqrt(x);i<=lim;i++){
if(x%i==0){
cnt[i]--,ret+=mu[i]*cnt[i];
if(i*i!=x)cnt[x/i]--,ret+=mu[x/i]*cnt[x/i];
}
}
ans-=ret;
}
cout<<ans<<'\n';
}
return 0;
}
/*
8 8
77770 436260 150552 164101 453308 1 1 329637
1 2 3 4 5 6 7 8
*/
Codeforces 548E Mike ans Foam (与质数相关的容斥多半会用到莫比乌斯函数)的更多相关文章
- Codeforces 547C/548E - Mike and Foam 题解
目录 Codeforces 547C/548E - Mike and Foam 题解 前置芝士 - 容斥原理 题意 想法(口胡) 做法 程序 感谢 Codeforces 547C/548E - Mik ...
- hdu4135-Co-prime & Codeforces 547C Mike and Foam (容斥原理)
hdu4135 求[L,R]范围内与N互质的数的个数. 分别求[1,L]和[1,R]和n互质的个数,求差. 利用容斥原理求解. 二进制枚举每一种质数的组合,奇加偶减. #include <bit ...
- Codeforces Round #330 (Div. 2) B. Pasha and Phone 容斥定理
B. Pasha and Phone Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/595/pr ...
- Codeforces Round #258 (Div. 2) E. Devu and Flowers 容斥
E. Devu and Flowers 题目连接: http://codeforces.com/contest/451/problem/E Description Devu wants to deco ...
- codeforces 342D Xenia and Dominoes(状压dp+容斥)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud D. Xenia and Dominoes Xenia likes puzzles ...
- Codeforces Round #330 (Div. 2)B. Pasha and Phone 容斥
B. Pasha and Phone Pasha has recently bought a new phone jPager and started adding his friends' ph ...
- codeforces 547c// Mike and Foam// Codeforces Round #305(Div. 1)
题意:给出数组arr和一个空数组dst.从arr中取出一个元素到dst为一次操作.问每次操作后dst数组中gcd等于1的组合数.由于数据都小于10^6,先将10^6以下的数分解质因数.具体来说从2开始 ...
- Codeforces.547C.Mike and Foam(容斥/莫比乌斯反演)
题目链接 \(Description\) 给定n个数(\(1\leq a_i\leq 5*10^5\)),每次从这n个数中选一个,如果当前集合中没有就加入集合,有就从集合中删去.每次操作后输出集合中互 ...
- Codeforces Round #428 (Div. 2) D. Winter is here 容斥
D. Winter is here 题目连接: http://codeforces.com/contest/839/problem/D Description Winter is here at th ...
随机推荐
- java中get请求的中文乱码问题
表单采用Get方式提交,解决乱码的方法为: 方式一:手动解码 param = new String(param.getBytes("iso8859-1"), ...
- (转)sqoop常用命令http://www.cnblogs.com/cenyuhai/p/3306037.html
转于:http://www.cnblogs.com/cenyuhai/p/3306037.html 这个连接已经写的很详细了,我看了很受启发.
- ADIS16405BMLZ
GND,VCC,CS,DOUT,SCLK,DIN
- CodeForces 1166E The LCMs Must be Large
题目链接:http://codeforces.com/problemset/problem/1166/E 说明 LCM(一个集合) 为这个集合中所有元素的最小公倍数. 如果$A \subseteq B ...
- 从数组中任意取出2个数,判断他们的和是否为输入的数字sum,时间复杂度为0(n^2),空间复杂度0(1)
从数组中任意取出2个数,判断他们的和是否为输入的数字sum,时间复杂度为0(n^2),空间复杂度0(1) 假设数据已经是排序好的 #include <stdio.h> #include & ...
- BAT大神推荐:看懂英文文档,每天只需要10分钟做这件事……
程序员这个行业是很特殊的.之所以说特殊,就是因为它所有的技术大多来自欧美,所以最主流,最新鲜,最正确的技术文章都是英文,遗憾的是,大部分还没有译本. 有些译文还比较差.与其等待别人的翻译,不如直接阅读 ...
- 在CentOS 7上安装常用的YUM源
参考地址:https://blog.csdn.net/u010048823/article/details/51298183 以epel源为例子,来讲解如何添加额外的YUM源. Extra Packa ...
- iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 5000 -j DNAT --to-destination
启动docker容器时报错: iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 5000 -j DNAT ...
- iOS开发系列-Shell脚本生成IPA
概述 在公司开发到了测试阶段需要频繁打包交付给测试,看似简单的工作,重复的流程总是感觉不是那么好,我们可以借助苹果提供的编译指令编译项目. 自动化脚本编译打包IPA 常见的iOS项目就是基于xcode ...
- thinkphp 多层mvc
hinkPHP基于MVC(Model-View-Controller,模型-视图-控制器)模式,并且均支持多层(multi-Layer)设计. 模型(Model)层 默认的模型层由Model类构成,但 ...