題意:
有n個人,一開始所有人互相不認識。
現在有m場party,每場給出l,r,表示編號在[l,r]內的所有人參加,參加之後這些人互相認識。
現在要求計算每次party之後會有多少對新的互相認識的人,
資料範圍:n,m<=2e5
解法:因為區間是連續的,
令l[i]表示第i個人向左方向認識的最大位置(不需要r[i],i會被滿足i∑i=
lr[l
[i
]>l]
∗(l[
i]−l
),然後
更新l[
i]為l
\sum_^r[l[i]>l]*(l[i]-l),然後更新l[i]為l
∑i=lr
[l[i
]>l]
∗(l[
i]−l
),然後
更新l[
i]為l
。顯然需要區間取min操作,同時需要維護乙個區間max,可以上吉司機線段樹。
因為每次修改都需要修改的葉子節點,可以在更新的同時統計答案。
吉司機線段樹的複雜度應該是o(mlogn)的。
code:
#include
using
namespace std;
#define ll long long
const
int maxm=
5e5+5;
int n,m;
struct tree
void
build
(int l,
int r,
int node)
int mid=
(l+r)/2
;build
(l,mid,node*2)
;build
(mid+
1,r,node*2+
1);pp
(node);}
ll update
(int st,
int ed,
int val,
int l,
int r,
int node)
int mid=
(l+r)/2
; ll ans=0;
if(st<=mid)ans+
=update
(st,ed,val,l,mid,node*2)
;if(ed>mid)ans+
=update
(st,ed,val,mid+
1,r,node*2+
1);pp
(node)
;return ans;
}}t;
signed
main()
}return0;
}
HDU 6521 Party(線段樹 思維)
大致題意 有n個人,一開始相互不認識。他們要去參加party,每次參加的人是編號在區間 l,r 內的人。參加完一次party之後,這區間內的人就會相互認識。現在問你,每次參加party的時候,有多少對人會新認識。首先,在參加這麼多次party的過程中,每個人認識的人的編號顯然是乙個連續的區間。於是,...
hdu 3062 Party 最裸2 sat題目
題意 中文.思路 來自伍昱的 由對稱性解2 sat問題 把確定不矛盾的雙方建立邊,然後tarjan縮點。判斷每一對夫妻是否屬於不同的環,如果存在同一環裡,則無解,否則有解 pragma comment linker,stack 327680000,327680000 include include ...
HDU 4512 吉哥系列故事 完美隊形I
problem description 吉哥這幾天對隊形比較感興趣。有一天,有n個人按順序站在他的面前,他們的身高分別是h 1 h 2 h n 吉哥希望從中挑出一些人,讓這些人形成乙個新的隊形,新的隊形若滿足以下三點要求,則稱之為完美隊形 1 挑出的人保持他們在原隊形的相對順序不變 2 左右對稱,假...