P2184 貪婪大陸

2022-01-10 21:29:59 字數 1218 閱讀 6196

看到全是線段樹或者樹狀陣列寫法,就來提供一發全網唯一cdq分治三維偏序解法吧

容易發現,這個題的查詢就是對於每個區間l,r,查詢有多少個修改區間li,ri與l,r有交集

轉化為數學語言,就是查詢滿足li

<=r且ri>=l的修改個數

乙個二維偏序問題,但是我們發現,這是個動態插入的二維偏序問題

_(:з」∠)_一時不知所措

再想一想,不妨把時間另開乙個維度作為第三維,然後就是這樣了

對於每個查詢,我們要求出它之前有多少個修改區間與其相交

數學語言:

查詢滿足li

<=r且ri>=l且[li,ri].time<[l,r].time的修改個數

思路清晰明了,而且敲好想,但是實現細節還是比較麻煩的(一部分是因為我的奇葩cdq寫法),在**注釋裡解釋一下(模板這種的就不解釋了)

#include#include

#include

#include

using

namespace

std;

const

int maxn=1e5+10

;struct

nodev[maxn];

intn,m,cnt,tot,c[maxn],ans[maxn];

bool

vis[maxn];

bool cmpx(const node &a,const node &b)

bool cmpy(const node &a,const node &b)

int lowbit(int

x)void add(int x,int

ch)}

int sum(int

x)

return

ret;

}void cdq(int l,int

r)

for(j=l;j)

add(v[j].c,-v[j].w);

}int

main()

cdq(

1,m);

//列舉每個操作,需要輸出就輸出

for(int i=1;i<=m;i++)

if(vis[i])

printf(

"%d\n

",ans[i]);

return0;

}

P2184 貪婪大陸

題目描述面對螞蟻們的瘋狂進攻,小ff的tower defence宣告失敗 人類被螞蟻們逼到了greed island上的乙個海灣。現在,小ff的後方是一望無際的大海,前方是變異了的超級螞蟻。小ff還有大好前程,他可不想命喪於此,於是他派遣手下最後一批改造scv布置地雷以阻擋螞蟻們的進攻。小ff最後一...

P2184 貪婪大陸

面對螞蟻們的瘋狂進攻,小ff的tower defence宣告失敗 人類被螞蟻們逼到了greed island上的乙個海灣。現在,小ff的後方是一望無際的大海,前方是變異了的超級螞蟻。小ff還有大好前程,他可不想命喪於此,於是他派遣手下最後一批改造scv布置地雷以阻擋螞蟻們的進攻。小ff最後一道防線是...

P2184 貪婪大陸

目錄p2184 貪婪大陸 樹狀陣列的模板題 1.只要乙個區間的開頭在乙個節點 i 的左邊,那麼這個區間包含在區間 1 i 中。2.只要乙個區間的尾部在乙個節點 j 的左邊,那麼這個區間肯定不屬於 j 之後的所有區間 所以我們可以搞兩個樹狀陣列來做 tree i 維護 i 之前的開頭數量 tree j...