题意分析

就是让你求

\[\sum_{i=1}^{|S|}val[i][gcd(a[i],x)=y]
\]

那么接下来就是化简式子

\[\sum_{i=1}^{|S|}val[i][gcd(\frac{a[i]}{y},\frac{x}{y})=1]
\]

\[\sum_{i=1}^{|S|}val[i]\sum_{d|\frac{a[i]}{y}d|\frac{x}{y}}μ(d)
\]

\[\sum_{i=1}^{|S|}val[i]\sum_{dy|a[i]dy|x}μ(d)
\]

我们考虑枚举\(x\)的因子\(k=dy\)

那么贡献就是\(μ(\frac{k}{y})*s[i]\)

其中\(s[i]=\sum_{i|d}val[d]\)

这里直接让\(val[a[i]]=val[i]\)了

然后查询修改我们都可以\(\sqrt n\)了

CODE:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<cstdlib>
#include<string>
#include<queue>
#include<map>
#include<stack>
#include<list>
#include<set>
#include<deque>
#include<vector>
#include<ctime>
#define ll long long
#define inf 0x7fffffff
#define N 10000008
#define IL inline
#define M 1008611
#define D double
#define maxn 10000000
#define mod 20020303
#define R register
using namespace std;
template<typename T>IL void read(T &_)
{
T __=0,___=1;char ____=getchar();
while(!isdigit(____)) {if(____=='-') ___=0;____=getchar();}
while(isdigit(____)) {__=(__<<1)+(__<<3)+____-'0';____=getchar();}
_=___ ? __:-__;
}
/*-------------OI使我快乐-------------*/
int n,m,tot;
struct Node
{
int xx,yy;
}e[M];
int prime[N],mul[N],val[N];
ll sum[N];
bool mark[N];
IL void work()
{
mul[1]=1;
for(R int i=2;i<=maxn;++i)
{
if(!mark[i]) {prime[++tot]=i;mul[i]=-1;}
for(R int j=1;j<=tot&&prime[j]*i<=maxn;++j)
{
mark[prime[j]*i]=1;
if(i%prime[j]==0)
{
mul[prime[j]*i]=0;
break;
}
else mul[prime[j]*i]=-mul[i];
}
} }
int main()
{
freopen("t1.in","r",stdin);
freopen("t1.out","w",stdout);
read(n);read(m);work();
for(R int i=1,x,y;i<=n;++i)
{
read(x);read(y);
val[x]=y;
}
for(R int i=1;i<=maxn;++i)
for(R int j=i;j<=maxn;j+=i)
sum[i]+=val[j];
while(m--)
{
int knd,x,y;ll ans=0;
read(knd);read(x);read(y);
if(knd==1)
{
for(R int i=1;i*i<=x;++i)
{
if(x%i) continue;
int cdy=i,wzy=x/i;
if(cdy%y==0)
{
int now=cdy/y;
ans=(ans+mul[now]*sum[cdy]%mod+mod)%mod;
}
if(cdy==wzy) continue;
if(wzy%y==0)
{
int now=wzy/y;
ans=(ans+mul[now]*sum[wzy]%mod+mod)%mod;
}
}
printf("%lld\n",ans);
}
else
{
if(val[x])
{
for(R int i=1;i*i<=x;++i)
{
if(x%i) continue;
int cdy=i,wzy=x/i;
sum[cdy]-=val[x];
if(cdy==wzy) continue;
sum[wzy]-=val[x];
}
val[x]=0;
}
else
{
val[x]=y;
for(R int i=1;i*i<=x;++i)
{
if(x%i) continue;
int cdy=i,wzy=x/i;
sum[cdy]+=val[x];
if(cdy==wzy) continue;
sum[wzy]+=val[x];
}
}
}
}
fclose(stdin);
fclose(stdout);
return 0;
}

HEOI 2019 RP++

考试题 T1的更多相关文章

  1. kma 2019CSP前刷题记录

    2019/10/25 \([LNOI2014]\ LCA\) \([Luogu\ P2774]\) 方格取数问题 \(Gauss\)消元板 \([JSOI2008]\)球形空间产生器 2019/10/ ...

  2. T1加权像(T1 weighted image,T1WI)

    T1加权成像(T1-weighted imaging,T1WI)是指这种成像方法重点突出组织纵向弛豫差别,而尽量减少组织其他特性如横向弛豫等对图像的影响. 弛豫:物理用语,从某一个状态恢复到平衡态的过 ...

  3. 关于2016.12.12——T1的反思:凸包的意义与应用

    2016.12.12 T1 给n个圆,保证圆圆相离,求将圆围起来的最小周长.n<=100 就像上图.考场上,我就想用切线的角度来做凸包.以圆心x,y排序,像点凸包一样,不过用两圆之间的下切线角度 ...

  4. T2 Func<in T1,out T2>(T1 arg)

    委托调用方法的4种方式. using System; using System.Collections.Generic; namespace ConsoleApplication1 { delegat ...

  5. E1、T1链路

    北美的24路脉码调制PCM简称T1 速率是1.544Mbit/s 北美使用的T1系统共有24个话路,每个话路采样脉冲用7bit编码,然后再加上1位信令码元,因此一个话路占用8bit. 帧同步码是在24 ...

  6. Action<T1, T2>委托

    封装包含两个参数的方法委托,没有返回值. 语法 public delegate void Action<in T1, in T2>( T1 arg1, T2 arg2 ) 类型参数 in ...

  7. 有三个线程T1 T2 T3,如何保证他们按顺序执行-转载

    T3先执行,在T3的run中,调用t2.join,让t2执行完成后再执行t3 在T2的run中,调用t1.join,让t1执行完成后再让T2执行 public class Test { // 1.现在 ...

  8. 现在有T1、T2、T3三个线程,怎样保证T2在T1执行完后执行,T3在T2执行完后执行?使用Join

    public class TestJoin { public static void main(String[] args) { Thread t1 = new Thread(new T1(), &q ...

  9. 【测试】在hr用户下自行创建T1和T2表写一条SQL语句,(NL连接)

    SQL> select t1.* from t1,t2 where t1.object_id=t2.object_id; rows selected. Execution Plan ------ ...

随机推荐

  1. set 续2

    --------siwuxie095                 用 set 命令进行字符串处理(这个不应只属于 set 的内容,应该归属于格式内容, 在没有 set 的情况下,格式仍旧适用)   ...

  2. Emacs中编辑保存makefile文件时会错误地将TAB转成空格的解决方法

    问题描述 我的Emacs使用了Purcell的配置,在其配置中使用了whitespace-cleanup,且通过在.emacs.d/lisp/init-edit-utils.el中设定: (requi ...

  3. 磁盘512n,512e,4k原生磁盘的区别和操作系统支持

    磁盘按照物理扇区大小的不同分为三种512byte原生扇区硬盘(512n),4KB扇区仿真512byte(512E)磁盘,4kB扇区原生磁盘. 首先说物理扇区,扇区是硬盘上最小的读写单位,这个是硬盘决定 ...

  4. MyBatis 实用篇(一)入门

    MyBatis 实用篇(一)入门 MyBatis(http://www.mybatis.org/mybatis-3/zh/index.html) 是一款优秀的持久层框架,它支持定制化 SQL.存储过程 ...

  5. 禁止进入activity自动弹出键盘

    禁止进入activity自动弹出键盘 在Manifest.xml中设定activity的属性 android:windowSoftInputMode="stateHidden|stateUn ...

  6. 关于使用 ps脚本来处理图片的排层问题

    问题是这样,在三维软件 把模型切割,给切割的部件排上序号 如 :tianji_1-431_bujian13.png 中间一段数据就是表示的 1.431 该数据之后 会到ps总排层使用 在ps排层出三维 ...

  7. va泛型

    va泛型 什么是泛型? 泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类.可以把类型参数看作是使用参数化类型时指定的 ...

  8. CentOS 7 装好系统一些优化

    1.禁用SELINUX vi /etc/sysconfig/selinux  设置为disabled 2.同步时间*/20 * * * * /usr/sbin/ntpdate pool.ntp.org ...

  9. select for update [nowait]

    Syntax The NOWAIT and WAIT clauses let you tell the database how to proceed if the SELECT statement ...

  10. linux 用户/用户组添加修改删除(ubuntu/centos)

    一.LINUX(UBUNTU/CENTOS)用户添加删除修改 1.建用户: adduser web                             //新建web用户 useradd web  ...