51 Nod 1678 lyk与gcd
这天,lyk又和gcd杠上了。
它拥有一个n个数的数列,它想实现两种操作。
1:将 ai 改为b。
2:给定一个数i,求所有 gcd(i,j)=1 时的 aj 的总和。
第一行两个数n,Q(1<=n,Q<=100000)。
接下来一行n个数表示ai(1<=ai<=10^4)。
接下来Q行,每行先读入一个数A(1<=A<=2)。
若A=1,表示第一种操作,紧接着两个数i和b。(1<=i<=n,1<=b<=10^4)。
若B=2,表示第二种操作,紧接着一个数i。(1<=i<=n)。
对于每个询问输出一行表示答案。
5 3
1 2 3 4 5
2 4
1 3 1
2 4
9
7
#include<vector>
#include<cstring>
#include<cstdio>
using namespace std;
#define N 100010
#define LL long long
vector<int>f[N],g[N];
int a[N],n,ques;
bool q[N];
long long sum[N];
void Prepare(){
int cnt=;
for(int i=;i<=n;i++){
if(!q[i])a[++cnt]=i;
for(int j=;j<=cnt;j++){
if(a[j]*i>n) break;
q[a[j]*i]=;
if(i % a[j] == ) break;
}
}
for(int i=;i<=cnt;i++){
for(int j=a[i];j<=n;j+=a[i]){
int w=f[j].size();
for(int k=;k<w;k++){
f[j].push_back(f[j][k]*a[i]);
g[j].push_back(g[j][k]+);
}
f[j].push_back(a[i]);
g[j].push_back();
}
}
}
int main()
{
LL ans;
scanf("%d%d",&n,&ques);
Prepare();
for(int i=;i<=n;i++){
scanf("%d",&a[i]);sum[]+=a[i];
for(int j=;j<f[i].size();j++)
sum[f[i][j]]+=a[i];
}
int x,pos,value;
while(ques--){
scanf("%d",&x);
if(x==){
scanf("%d%d",&pos,&value);
for(int i=;i<f[pos].size();i++)
sum[f[pos][i]]-=a[pos];
sum[]-=a[pos];a[pos]=value;sum[]+=a[pos];
for(int i=;i<f[pos].size();i++)
sum[f[pos][i]]+=a[pos];
}
else{
ans=sum[];
scanf("%d",&pos);
for(int i=;i<f[pos].size();i++)
if(g[pos][i] & )ans-=sum[f[pos][i]];
else ans+=sum[f[pos][i]]; printf("%lld\n",ans);
}
}
return ;
}
比较基础的容斥题,我们预处理出每个i的所有素因子的组合,比如6={2,3,6},那么我们对于a[6]将它加入到sum[2],sum[3],sum[6]中,统计答案时用容斥思想加加减减就行了。
51 Nod 1678 lyk与gcd的更多相关文章
- 51 Nod 1678 lyk与gcd(容斥原理)
1678 lyk与gcd 基准时间限制:2 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 收藏 关注 这天,lyk又和gcd杠上了. 它拥有一个n个数的数列,它想实现两种操作 ...
- 1678 lyk与gcd
1678 lyk与gcd 基准时间限制:2 秒 空间限制:131072 KB 这天,lyk又和gcd杠上了.它拥有一个n个数的数列,它想实现两种操作. 1:将 ai 改为b.2:给定一个数i,求所有 ...
- 51nod 1678 lyk与gcd | 容斥原理
51nod 200题辣ψ(`∇´)ψ !庆祝! 51nod 1678 lyk与gcd | 容斥原理 题面 这天,lyk又和gcd杠上了. 它拥有一个n个数的数列,它想实现两种操作. 1:将 ai 改为 ...
- [51nod]1678 lyk与gcd(莫比乌斯反演)
题面 传送门 题解 和这题差不多 //minamoto #include<bits/stdc++.h> #define R register #define pb push_back #d ...
- 51nod lyk与gcd
1678 lyk与gcd 基准时间限制:2 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 这天,lyk又和gcd杠上了.它拥有一个n个数的数列,它想实现两种操作. 1:将 ai ...
- 51nod1678 lyk与gcd
容斥定理所以可以用莫比乌斯函数来搞.逆向思维答案等于总和减去和他互质的.那么设f[i]=∑a[j] i|j.ans[i]=sum- ∑mo[j]*f[j] 跟bzoj2440那道题挺像的都是利用莫比乌 ...
- 51 nod 1439 互质对(Moblus容斥)
1439 互质对 题目来源: CodeForces 基准时间限制:2 秒 空间限制:131072 KB 分值: 160 难度:6级算法题 有n个数字,a[1],a[2],…,a[n].有一个集合,刚开 ...
- 51 nod 1610 路径计数(Moblus+dp)
1610 路径计数 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 路径上所有边权的最大公约数定义为一条路径的值. 给定一个有向无环图.T次修改操作,每次修改一 ...
- 51 nod 1188 最大公约数之和 V2
1188 最大公约数之和 V2 题目来源: UVA 基准时间限制:2 秒 空间限制:262144 KB 分值: 160 难度:6级算法题 给出一个数N,输出小于等于N的所有数,两两之间的最大公约数 ...
随机推荐
- 14.2-ELK 经典用法—企业自定义日志收集切割和mysql模块
本文收录在Linux运维企业架构实战系列 一.收集切割公司自定义的日志 很多公司的日志并不是和服务默认的日志格式一致,因此,就需要我们来进行切割了. 1.需切割的日志示例 2018-02-24 11: ...
- k8s的pv和pvc简述
pvc:资源需要指定:1.accessMode:访问模型:对象列表: ReadWriteOnce – the volume can be mounted as read-write by a s ...
- windows 时间同步至最新时间方法 | windows 时间同步服务器
国内 windows 系统的电脑有时候不能自动同步互联网当前时间,这就需要改一下 windows 的时间同步服务器 版权声明:本文为博主原创文章,未经博主允许不得转载. 原文地址:https://ww ...
- OpenFaceswap 入门教程(1):软件安装篇
---恢复内容开始--- 众多换脸软件中,DeepFaceLab其实是安装和使用最方便,更新最快的,但是由于其没有可是化界面,对于很新手来说,可能入门还是有点难度.那么今天就来介绍一款操作极其直观和简 ...
- 基于django的个人博客网站建立(一)
基于django的个人博客网站建立(一) 前言 网站效果可点击这里访问 之前基于hexo和github page搭建过一个博客网页,后来由于换了个系统,感觉弄的有点麻烦也就没有再去管它了,最近偶然从网 ...
- LightOJ 1141 Number Transformation
Number Transformation In this problem, you are given an integer number s. You can transform any inte ...
- Python 代码优化技巧(一)
Table of Contents 1. 代码优化Part1 1.1. if 判断的短路特性 1.2. join 合并字符串 1.3. while 1 和 while True 1.4. cProfi ...
- DiyCode开源项目 BaseActivity 分析
1.首先将这个项目的BaseActivity源码拷贝过来. /* * Copyright 2017 GcsSloop * * Licensed under the Apache License, Ve ...
- Java集合---List、Set、Iterator、Map简介
1.List集合 1.1概念 List继承自Collection接口.List是一种有序集合,List中的元素可以根据索引(顺序号:元素在集合中处于的位置信息)进行取得/删除/插入操作. 跟Set集合 ...
- vrpie下实现vrp模型和javascript的交互
最近在做一个vrpie的项目,用vrp建模生成vrpie,然后在网页上面显示,这里需要和网页上面的其他内容交互,现在总结一下开发经验. 第一个需求是在网页上面点击那个的时候做一些事情,通过查找sdk找 ...