51nod1678 lyk与gcd
2016-07-08 11:47
211 查看
链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1678
题意:中文题。
分析:比较基础的容斥题,我们预处理出每个i的所有素因子的组合,比如6={2,3,6},那么我们对于a[6]将它加入到sum[2],sum[3],sum[6]中,统计答案时用容斥思想加加减减就行了。O(nlogn)
代码:
#include<map> #include<set> #include<cmath> #include<queue> #include<bitset> #include<math.h> #include<vector> #include<string> #include<stdio.h> #include<cstring> #include<iostream> #include<algorithm> #pragma comment(linker, "/STACK:102400000,102400000") using namespace std; const int N=100010; const int MAX=1000000100; const int mod=100000000; const int MOD1=1000000007; const int MOD2=1000000009; const double EPS=0.00000001; typedef long long ll; const ll MOD=1000000007; const int INF=1000000010; const double pi=acos(-1.0); typedef double db; typedef unsigned long long ull; vector<int>f ; vector<int>g ; int a ,q ; ll sum ; void deal(int n) { int i,j,h,w,k=0; for (i=2;i<=n;i++) { if (!q[i]) a[++k]=i; for (j=1;j<=k;j++) { if (a[j]*i>n) break ; q[a[j]*i]=1; if (i%a[j]==0) break ; } } for (i=1;i<=k;i++) for (j=a[i];j<=n;j+=a[i]) { w=f[j].size(); for (h=0;h<w;h++) { f[j].push_back(f[j][h]*a[i]);g[j].push_back(g[j][h]+1); } f[j].push_back(a[i]);g[j].push_back(1); } } int main() { int i,j,n,q,x,y; ll ans; scanf("%d%d", &n, &q); deal(n); for (i=1;i<=n;i++) { scanf("%d", &a[i]);sum[1]+=a[i]; for (j=0;j<f[i].size();j++) sum[f[i][j]]+=a[i]; } while (q--) { scanf("%d", &x); if (x==1) { scanf("%d%d", &x, &y); for (i=0;i<f[x].size();i++) sum[f[x][i]]-=a[x]; sum[1]-=a[x];a[x]=y;sum[1]+=a[x]; for (i=0;i<f[x].size();i++) sum[f[x][i]]+=a[x]; } else { ans=sum[1]; scanf("%d", &x); for (i=0;i<f[x].size();i++) if (g[x][i]&1) ans-=sum[f[x][i]]; else ans+=sum[f[x][i]]; printf("%lld\n", ans); } } return 0; }
相关文章推荐
- NFS部署和优化
- Python 2 中的编码
- 搭建高可用MongoDB集群(一):配置MongoDB
- 微信公众号框架之吐槽
- 查询Android的包名和activity名方法
- Java中你必须记住的String方法
- android sutdio 运行项目报错java.io.IOException: Failed to read zip file
- Eclipse打不开,提示: An error has occurred. see the log file解决办法
- ndk-stack 学习使用
- Remove Duplicates from Sorted List II
- 用C/C++开发android应用
- 282. Expression Add Operators
- html (jsp )表单元素总结
- MySQL 企业常用架构与调优经验分享
- Mysql学习总结(22)——Mysql数据库中制作千万级测试表
- Mysql学习总结(22)——Mysql数据库中制作千万级测试表
- WRONGTYPE Operation against a key holding the wrong kind of value
- 李洪强iOS开发之OC语言类的深入和分类
- java -- java.lang.NoSuchMethodError的问题
- LLVM 3.0异常处理重设计