題目在這裡哦, 戳一下就可以了~
題目大意:
支援兩種操作,區間新增一種新元素,查詢區間顏色種數..
題目標籤是線段樹啊,我也本來想寫乙個線段樹,後來寫不出來……(我太弱了orz)
然後就草率地看了看題解裡面的思路咯,感覺思路非常的不錯,於是我就a掉這題之後寫了這篇blog…
我們通過這幅圖可以看到:
- 我們直接統計區間的覆蓋不是很好統計, 考慮字首
- 當前我們已經進行了10次覆蓋
- 從[1,r]這個區間中有9個覆蓋
- 但是其中有3個覆蓋完全在l的左側(即右端點在[1,l-1])
- 所以應該只有6次覆蓋在[l,r]範圍內
- ∴ans=6
我們可以發現,這是乙個區間覆蓋的問題,詢問的答案是[1,r]中的種類數減去[1,l-1] 中的右端點數…
然後此題就淪為了一道區間和單點修改單點和區間查詢的題目…
我們可以用兩個不同的資料結構來分別維護右端點數目和種類數…我們整理了一下發現:
- 對於右端點,我們修改的時候在右端點單點加,查詢的時候區間查詢[1,l-1]..
- 對於種類數,我們修改的時候做區間加,往區間[l,n]加上,查詢的時候單點查r點的值..
所以,乙個單點加區間查,乙個區間加單點查,就是這樣兩個樹狀陣列的基本操作了…
而區間操作都是含1和n的,所以我們就可以省掉一些步驟..
最後寫出來就是這樣:
#include
const
int n=101010;
inline
int gnum()
int t[2][n],n,m;
void add(int *c,int x)
int query(int *c,int x)
int main()
}
這樣就可以咯~ 學術篇 SDOI2008 山賊集團
今天一月一號.突然想安利一波我的中二的2017總結.傳送門1 codevs 傳送門2 luogu 時限5s和1s的區別 你沒看我傳送門都給的大牛分站了 現在不僅線篩.有負數的快讀都打不對了.來比較一下他們的區別?inline int gn int a 0,char c 0,int f 1 inlin...
學術篇 網路流24題 餐巾計畫問題
傳送門 luogu2776 餐巾計畫問題 挑戰之傳送門 luogu1251 餐巾 這題非常經典啊。不過還是要吐槽一下luogu1251喪心病狂的資料,我3s竟然tle了,我覺得得花式壓壓常了,但是在luogu2776a了,本蒟蒻就勉強貼過來了。更新 luogu大牛分站提交自帶o2,於是就過了 題目大...
學術篇 網路流24題 騎士共存問題
啥也不說,先上傳送門 luogu3355 顯然,騎士的步伐有很好的性質 如果我們為棋盤黑白染色,騎士每一步只會從黑格走到白格,或從白格走到黑格。這一點下過西洋棋的人都知道,沒下過的畫一畫也知道 所以我們把棋盤黑白染色,依次標號,然後將障礙格去掉 單獨處理 我們建立源點s和匯點t,從s向所有黑格依次連...