题目描述
H 君是一个喜欢序列的男孩子,他给了你一个长度为 n n n 的序列。
H 君是一个喜欢求和的男孩子,他每次给了你一个区间 [ x , y ] [x,y] [x,y],要求你查询区间中数的和
可这样的题目太简单了,H 君想给你加大难度。
H 君会在询问之间穿插一些修改操作,每次它会给定整数 x x x 和 y y y,表示将所有下标是 x x x 的因数的数加 y y y。
输入描述
第一行两个整数 n , Q n, Q n,Q,表示序列长度和询问个数。
第二行 n n n 个整数,其中第 i i i 个表示 a i a_i ai。
接下来 Q Q Q 行,每行三个整数 o p , x , y op, x, y op,x,y,其中 o p = 1 op=1 op=1 为修改操作, o p = 2 op=2 op=2 为询问操作。
输出描述
对于每个询问操作输出每行一个整数,表示询问的结果。
样例输入 1
5 3
1 2 3 4 5
2 1 5
1 5 2
2 1 5
样例输出 1
15
19
#include <iostream>
using namespace std;
int main(int argc, char *argv[]) {
int n,m;
cin>>n>>m;
int *a=new int[n];
for(int i=0;i<n;i++)
{
cin>>a[i];
}
while(m--)
{
int count=0;
int flag,x,y;
cin>>flag>>x>>y;
if(flag==1)
{
int temp=x;
for(int i=0;i<n;i++)
{
if(temp%(i+1))==0)
a[i]+=y;
}
break;
}
else if(flag==2)
{
for(int i=x-1;i<y;i++)
{
count+=a[i];
}
}
cout<<count<<endl;
}
return 0;
}