1つの#include <ビット/ STDC ++ H>
2 の#define Nmaxを100010
3 の#define TN T [ノード]
4 の#define SL(ノード<< 1)
5 の#define SR((ノード<< 1)| 1)
6
7 使用 名前空間はstd;
8 typedefの長い 長いLL。
9 構造体segt {
10 のint L、R。
11 LLのV;
12 } T [Nmax個* 4 ]。
13 LL MOD、N。
14
15 空隙ビルド(int型 L、int型の R、INTのノード){
16 tn.v = 1 。
17 tn.l = L。
18 tn.r = R。
19 であれば(L == R)のリターン;
20 INT半ば=(L + R)>> 1 。
21 ビルド(L、中、SL)。
22 ビルド(MID + 1 、R、SR)。
23 }
24
25 ボイド UPD(int型ノード、int型のP、LLのX){
26 であれば(tn.l == tn.r){
27 tn.v = X。
28 リターン;
29 }
30 INT半ば=(tn.l + tn.r)>> 1 。
31 であれば(p <= MID)UPD(SL、P、X)。
32 他のUPD(SR、P、X)。
33 tn.v =(T [SL] .Vの* tの[SR] .V)%MOD。
34 }
35
36解く11(int型 L、int型の R、int型ノード){
37 であれば(tn.l> = L && tn.r <= r)は戻りtn.v。
38 INT半ば=(tn.l + tn.r)>> 1 。
39 LL ANS = 1 。
40 もし(L <= MID)ANS =(ANS *解決(L、R、SL))%MOD。
41 であれば(R> MID)ANS =(ANS *解決(L、R)、SR)%MOD。
42の リターンANS;
43 }
44
45 INT メイン(){
46 のint T、OP。
47 LLのNUM;
48 cinを>> トン。
49 一方(t-- ){
50 のscanf(" %D%dの"、&N、&MOD)。
51 ビルド(1、nは、1 )。
52 のために(INT I = 1; I <= N。I ++ ){
53 のscanf(" %d個の%のLLD "、&OP&NUM)。
54 であれば(OPの== 1)UPD(1、I、NUM)。他の UPD(1、NUM、1 );
55 のprintf(" %LLDする\ n "、解決(1、I、1 ))。
56 }
57 }
58 リターン 0 。
59 }