Luogu P3373 模板 線段樹 2

2022-06-09 03:27:09 字數 2166 閱讀 1725

如題,已知乙個數列,你需要進行下面三種操作:

1.將某區間每乙個數乘上x

2.將某區間每乙個數加上x

3.求出某區間每乙個數的和

輸入格式:

第一行包含三個整數n、m、p,分別表示該數列數字的個數、操作的總個數和模數。

第二行包含n個用空格分隔的整數,其中第i個數字表示數列第i項的初始值。

接下來m行每行包含3或4個整數,表示乙個操作,具體如下:

操作1: 格式:1 x y k 含義:將區間[x,y]內每個數乘上k

操作2: 格式:2 x y k 含義:將區間[x,y]內每個數加上k

操作3: 格式:3 x y 含義:輸出區間[x,y]內每個數的和對p取模所得的結果

輸出格式:

輸出包含若干行整數,即為所有操作3的結果。

輸入樣例#1:複製

5 5 38

1 5 4 2 3

2 1 4 1

3 2 5

1 2 4 2

2 3 5 5

3 1 4

輸出樣例#1:複製

17

2

時空限制:1000ms,128m

資料規模:

對於30%的資料:n<=8,m<=10

對於70%的資料:n<=1000,m<=10000

對於100%的資料:n<=100000,m<=100000

1

//2023年2月22日21:51:08

2 #include 3 #include 4 #include 5 #include 6

using

namespace

std;78

intn, m, mo;

9int a[410000], b[410000], sum[410000], size[410000

];10

11void change(int

k1)14

15void buildtree(int k1, int l, int

r)20

int mid = (l+r) >> 1

;21 buildtree(k1*2

, l, mid);

22 buildtree(k1*2+1, mid+1

, r);

23change(k1); 24}

2526

void add(int k1, int

x)30

31void chen(int k1, int

x)36

37void pushdown(int

k1)42

if(a[k1])47}

4849

void add(int k1, int l, int r, int l, int r, int

x)55

int mid = (l+r) >> 1;56

pushdown(k1);

57 add(k1*2

, l, mid, l, r, x);

58 add(k1*2+1, mid+1

, r, l, r, x);

59change(k1);60}

6162

void chen(int k1, int l, int r, int l, int r, int

x)67

int mid = l+r >> 1;68

pushdown(k1);

69 chen(k1*2

, l, mid, l, r, x);

70 chen(k1*2+1, mid+1

, r, l, r, x);

71change(k1);72}

7374

int find(int k1, int l, int r, int l, int

r)81

82int

main()else

if(k1 == 1

)else printf("

%d\n

", find(1, 1

, n, k2, k3));93}

9495

return0;

96 }

Luogu P3373 模板 線段樹 2

如題,已知乙個數列,你需要進行下面三種操作 1.將某區間每乙個數乘上x 2.將某區間每乙個數加上x 3.求出某區間每乙個數的和 include define mem x,v memset x,v,sizeof x define go i,a,b for int i a i b i define og...

P3373 線段樹模板

如題,已知乙個數列,你需要進行下面三種操作 1.將某區間每乙個數乘上x 2.將某區間每乙個數加上x 3.求出某區間每乙個數的和 輸入格式 第一行包含三個整數n m p,分別表示該數列數字的個數 操作的總個數和模數。第二行包含n個用空格分隔的整數,其中第i個數字表示數列第i項的初始值。接下來m行每行包...

luogu3373 模板 線段樹 2

題面 已知乙個數列,你需要進行下面三種操作 1.將某區間每乙個數乘上x 2.將某區間每乙個數加上x 3.求出某區間每乙個數的和 題解區間修改 區間查詢。維護兩個lazytag include include using namespace std const int maxn 100010 type...