首先想到線段樹,然後剛開始寫忽然想到樹狀數組求和豈不是更快,而且程式設計複雜度又小,于是把之前寫的删掉,寫樹狀數組,寫完模版之後忽然發現這題竟然是區間修改!
于是又删掉重寫,忽然發現不會處理又加又乘的,果斷看題解……
經過幾乎兩個小時的調試,終于1A。
需要注意的是,一定要讓線段樹的每一個區間儲存的值時刻為正确的,這樣才能在調用時直接傳回。比如說這道題的change和query操作的最後一句話:
sum:=f(g[k<<1]+g[k<<1+1])
而不是
sum:=f(t[k<<1].sum+t[k<<1+1].sum)
時刻記住這點就ok了。一開始我還以為我的模版記錯了呢……
代碼:
View Code
雖然現在已經12:30了,但我感覺,很開心。做了這道題,值!