bzoj
luogu
線段樹分治
是不是想問為什麼不暴力做?
模數沒說是質數,所以不一定有逆元.
然後就是要每次build一下把線段樹權值init成1,
博豬不知道為什麼for就wa,build就過了(用re自動機查了下,發現還是有0...)
for(int i=1;i<=(_<<1);i++)s[i]=1;
#define ls x<<1,l,mid
#define rs x<<1|1,mid+1,r
#includeusing namespace std;
const int _=1e5+5;
int re()
while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
return x*w;
}int t,p,q;
int val[_],ed[_],s[_<<2];
void mul(int&x,int y)
void bu(int x,int l,int r)
void upd(int x,int l,int r,int ql,int qr,int v)int mid=(l+r)>>1;
if(ql<=mid)upd(ls,ql,qr,v);if(qr>mid)upd(rs,ql,qr,v);
}void solve(int x,int l,int r,int v)
int mid=(l+r)>>1;solve(ls,v);solve(rs,v);
}int main()
bu(1,1,q);
for(int i=1;i<=q;i++)if(ed[i])upd(1,1,q,i,ed[i],val[i]);
solve(1,1,q,1);
} return 0;
}
TJOI2018 數學計算
如果採取暴力的做法,那麼乘起來會炸longlong,除非寫個高精。再考慮乘一下逆元呢,顯然也不行,模數不一定為質數。這道題的關鍵點在於這句話,對於每乙個型別1的操作至多會被除一次 這句話的最基本的告訴了我們每次得到的答案一定是乙個整數 其次,這句話保證了可以應用線段樹解決這個問題 如果除的操作可能會...
TJOI2018 數學計算(線段樹)
描述 小豆現在有乙個數 x xx 初始值為 1 11 小豆有 q qq 次操作,操作有兩種型別 1 11 m x x m x x m x x m 輸出 xxxm od modmodmm m 2 pos pospo s x x x x x x 第 pos 次操作所乘的數 保證第 pos pospo s...
TJOI2018 數學計算(線段樹)
題目描述 因為我在學校做過類似的題,所以這題一眼秒了 這題我們首先會想到乘法逆元,但發現不太可做。這時我們仔細考慮平衡樹,發現我們可以按照操作得到乙個陣列。最後通過線段樹查詢所有數的乘積。對於操作1,我們可以將陣列第i ii個數由1變為xxx 對於操作2,我們可以將陣列第i ii個數的值變為1 輸出...