看到全是線段樹或者樹狀陣列寫法,就來提供一發全網唯一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...