如果會二維線段樹的話,這個題目應該會好想一點,但是資料範圍不允許使用如果考慮一維線段樹的話,只能考慮每次的貢獻值其實不難發現,我們建兩個線段樹,分別維護 x 軸和 y 軸,這樣對於每一次詢問,只要找到 [x1,x2] 有幾個標記的點(記為 x),[y1,y2] 有幾個標記的點(記為 y)
所以答案為
也就是減去
那如果有兩個點重合呢?
const int n=1e6+5;
int i,j,k;
int n,m;
int a[n];
struct node
t[n<<2],t[n<<2];
void push_up(int id,node *t)
void build(int l,int r,int id,node *t)
}void update(int pos,int id,node *t)
}int query(int l,int r,int id,node *t)
}int main()
else}}
//pause;
return 0;
}
紅色的幻想鄉 洛谷p3801
蕾公尺莉亞的紅霧異變失敗後,很不甘心。經過上次失敗後,蕾公尺莉亞決定再次發動紅霧異變,但為了防止被靈夢退治,她決定將紅霧以奇怪的陣勢釋放。我們將幻想鄉看做是乙個n m的方格地區,一開始沒有任何乙個地區被紅霧遮蓋。蕾公尺莉亞每次站在某乙個地區上,向東南西北四個方向各發出一條無限長的紅霧,可以影響到整行...
洛谷 P3801 紅色的幻想鄉
蕾公尺莉亞的紅霧異變失敗後,很不甘心。經過上次失敗後,蕾公尺莉亞決定再次發動紅霧異變,但為了防止被靈夢退治,她決定將紅霧以奇怪的陣勢釋放。我們將幻想鄉看做是乙個n m的方格地區,一開始沒有任何乙個地區被紅霧遮蓋。蕾公尺莉亞每次站在某乙個地區上,向東南西北四個方向各發出一條無限長的紅霧,可以影響到整行...
luogu P3801 紅色的幻想鄉
嘟嘟嘟 首先人人都能想到是線段樹,不過二維線段樹肯定會mle tle的。我們換一種想法,不去修改整個區間,而是修改乙個點 開橫豎兩個線段樹,分別記錄哪些行和列被修改了。因為如果兩陣紅霧碰撞,則會因為密度過大而沉降消失,所以自然想到亦或。統計的時候求出這個矩形內有哪些行和列被修改了,接著把這些行和列的...