hdu6521 Party(吉司機線段樹)

2021-10-10 03:03:37 字數 1414 閱讀 4681

題意:

有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 左右對稱,假...