题目描述

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;
}