codeforces/#305 Div1/547/C Mike and Foam 【容斥】
来源:互联网 发布:斗破沙城翅膀进阶数据 编辑:程序博客网 时间:2024/05/01 20:31
n个数q次询问
输入n个数的值
每次询问给出一个i,代表第i个数,如果没有这个数,就把它加进集合,如果集合里有,就把它剔除
输出每次增加或删除数后的gcd对数,gcd(a,b),a<b
数据在1e5,容斥原理分解质因数。
#include <bits/stdc++.h>#define For(i,a,b) for(int (i)=(a);(i) < (b);(i)++)#define rof(i,a,b) for(int (i)=(a);(i) > (b);(i)--)#define IOS ios::sync_with_stdio(false)#define lson l,m,rt <<1#define rson m+1,r,rt<<1|1#define mem(a,b) memset(a,b,sizeof(a))typedef long long ll;typedef unsigned long long ull;using namespace std;const int maxn = 5e5+10;const int INF =0x3f3f3f3f;int a[maxn];vector<int>p[maxn];bool flag[maxn];int num[maxn];int mul[maxn];ll ans;ll solve(int id,bool sgn){ ll ret=0; for(int mask=0;mask< (1<<p[id].size());mask++){ if(!mask) mul[mask]=1; else{ mul[mask]=mul[mask&(mask-1)]*p[id][__builtin_ctz(mask)]; } int oo=mul[mask]; if(sgn)num[oo]--; if(__builtin_popcount(mask)&1) ret-=num[oo]; else ret+=num[oo]; if(!sgn) num[oo]++; } if(!sgn) ans+=ret; else ans-=ret; return ans;}int main(){ IOS; int n,q; for(int i=2;i<maxn;i++) if(p[i].empty()) for(int j=i;j<maxn;j+=i) p[j].push_back(i); while(cin>>n>>q){ mem(flag,0);mem(num,0);ans=0; For(i,0,n)cin>>a[i+1]; while(q--){ int x; cin>>x; cout<<solve(a[x],flag[x])<<endl; flag[x]=!flag[x]; } } return 0;}
0 0
- codeforces/#305 Div1/547/C Mike and Foam 【容斥】
- Mike and Foam - CodeForces #547 C 容斥原理
- Codeforces 547C Mike and Foam 容斥
- 【Codeforces】547C Mike and Foam 容斥
- *Codeforces Round #305 (Div. 1) C. Mike and Foam(容斥原理)
- Codeforces Round #305 (Div. 1)C. Mike and Foam(素数+容斥)
- CF 547 C Mike and Foam(容斥原理)
- Codeforces 548E Mike and Foam(容斥)
- CodeForces 548E Mike and Foam (容斥+数论)
- Codeforces Round #305 (Div. 2) E. Mike and Foam 容斥原理
- Codeforces #305 div2 E. Mike and Foam 数论 容斥原理
- Codeforces Round #305 (Div. 2) 548E. Mike and Foam 容斥
- CF 305 div2 E. Mike and Foam (容斥原理)
- codeforces548E Mike and Foam -- 容斥
- Code Forces 547 C. Mike and Foam(素因子分解+容斥)
- codeforces 547C. Mike and Foam (反演)
- Codeforces Round #305 (Div. 1)C. Mike and Foam 数学
- codeforces #305 547C C. Mike and Foam(莫比乌斯反演)
- 使用递归做到1个for循环打印菱形
- 最短路径—Dijkstra算法和Floyd算法
- 第十三周项目3:立体类族共有的抽象类
- EEPROM和flash的区别
- Java Note - Everything is an object
- codeforces/#305 Div1/547/C Mike and Foam 【容斥】
- C实现简单web服务器-1(windows)
- Largest Rectangle in a Histogram(动态规划找最大矩形面积)
- 清平调 · 李白
- [编程题] 奇数位上都是奇数或者偶数位上都是偶数
- 关于hibernate通过注解方式自动生成表时字段的顺序问题
- makefile小记v2
- C++实现Bellmanford算法
- akoj-1272-字母统计