#1443. 函数的重载

函数的重载

Background

函数重载定义

  • 函数名相同,但是参数类型或者参数个数不同的两个函数叫做函数重载

函数重载判断标准

  • 函数的参数个数、参数类型、参数顺序不同三者中满足其中一个,就是函数重载了
  • 如果只有函数返回值不同,不是函数重载;返回值不同,参数也不同的时候,可以作为函数重载

例如实现一个求绝对值的函数,若是 int 类型就返回 int 类型的,若是 double 的就返回 double 的。

int calc(int a)
{
    if (a >= 0) return a;
    return -a;
}
double calc(double a)
{
    if (a >= 0) return a;
    return -a;
}

Description

输入一个数列 aa,有 qq 次修改。每种修改分为两种类型:

  • 单点修改:只对某一个位置的数值增加某一个固定的值 cc
  • 区间修改:对某一个连续区间内的数字都重新设置为 cc

请你使用函数重载来尝试。

Format

Input

第一行输入两个数字 nnqq

接下来一行 nn 个空格隔开的数字代表 a1,a2,,ana_1,a_2,\cdots,a_n 初始的数字。

接下来 qq 行每行的输入格式如下:

先输入一个数字 opop,若 op=1op=1 代表第一种修改,此时会在输入两个数字 i,ci,c 意思为让 ai+ca_i+c

op=2op=2 代表第二种修改,此时会输入三个数字 l,r,cl,r,c 意思让 alara_l\sim a_r 的值都变成 cc

  • 1 i c
  • 2 l r c

Output

在所有的操作结束后。打印整个序列,相邻两个数字用空格隔开。

Samples

5 3
1 2 3 4 5
1 2 3
2 1 5 10
1 1 3
13 10 10 10 10

Sample 1 explain

一共操作三次,初始序列 a = [1, 2, 3, 4, 5]

  • 第一次,让 a2+3a_2+3,序列 a = [1, 5, 3, 4, 5]
  • 第二次,让 a1a5a_1\sim a_5 都变为 1010,序列 a = [10, 10, 10, 10, 10]
  • 第三次,让 a1+3a_1+3,序列 a = [13, 10, 10, 10, 10]

Limitation

$1\leq n,q\leq 10^3,op\in (1,2),1\leq i\leq n,1\leq l\leq r\leq n,1\leq c\leq 10^3$