SHOI2009 會場預約

2021-10-04 07:07:02 字數 1352 閱讀 2889

首先我們要知道,滿足什麼性質的線段,才與當前這個插入的線段有交集呢?

那就是:線段的左端點在[1,r],但是線段的右端點大於l,所以,我們直接把線段的左端點當成下標,值當成r,插入到線段樹當中即可。然後刪除操作:只要在區間[1,r],並且區間max大於等於當前插入的線段的左端點,那麼就去刪除即可。

同時線段樹維護一下元素個數。

ac**:

#pragma gcc optimize("-ofast","-funroll-all-loops")

#include

//#define int long long

using namespace std;

const

int n=

1e5+10;

int n,m=

1e5,mx[n<<2]

,sum[n<<2]

,s;char op[5]

;inline

void

push_up

(int p)

void

change

(int p,

int l,

int r,

int x,

int v)

int mid=l+r>>1;

if(x<=mid)

change

(p<<

1,l,mid,x,v)

;else

change

(p<<1|

1,mid+

1,r,x,v)

;push_up

(p);

}void

del(

int p,

int l,

int r,

int ql,

int qr,

int v)

int mid=l+r>>1;

if(qr<=mid)

del(p<<

1,l,mid,ql,qr,v)

;else

if(ql>mid)

del(p<<1|

1,mid+

1,r,ql,qr,v)

;else

del(p<<

1,l,mid,ql,mid,v)

,del

(p<<1|

1,mid+

1,r,mid+

1,qr,v)

;push_up

(p);

}signed

main()

else

printf

("%d\n"

,sum[1]

);}return0;

}

SHOI2009 會場預約

題意 支援操作 按順序在數軸上插入一條線段,刪除並詢問所有與這條線段有交的線段個數。詢問當前數軸上一共有多少條線段。想做了很久的題 觀察到和線段 l i,r i 有交的線段,實際上就是右端點 ge l i 並且左端點 le r i 的一些線段。我們可以把所有線段按照右端點第一關鍵字,左端點第二關鍵字...

SHOI2009 會場預約

orz 據說這個題有四種寫法 我孔乙己表示只會一種。暫時的 pp大廈有一間空的禮堂,可以為企業或者單位提供會議場地。這些會議中的大多數都需要連續幾天的時間 個別的可能只需要一天 不過場地只有乙個,所以不同的會議的時間申請不能夠衝突。也就是說,前乙個會議的結束日期必須在後乙個會議的開始日期之前。所以,...

SHOI2009 會場預約 線段樹

pp大廈有一間空的禮堂,可以為企業或者單位提供會議場地。這些會議中的大多數都需要連續幾天的時間 個別的可能只需要一天 不過場地只有乙個,所以不同的會議的時間申請不能夠衝突。也就是說,前乙個會議的結束日期必須在後乙個會議的開始日期之前。所以,如果要接受乙個新的場地預約申請,就必須拒絕掉與這個申請相衝突...