bzoj2028 SHOI2009 會場預約

2021-09-13 01:45:53 字數 1713 閱讀 9739

題目

假設當前輸入的區間為[l,

r]

[l,r]

[l,r

],那麼當區間[x,

y]

[x,y]

[x,y

]滿足l≤y

,x≤r

l≤y,x≤r

l≤y,x≤

r時,兩區間相交

我一直在想怎麼同時維護左右端點,後來才發現,直接以右端點為關鍵字,把所有區間放進set

setse

t裡,從小到大列舉≥l≥l

≥l的y

yy,如果y

yy對應的x≤r

x≤rx≤

r,那麼直接刪掉,否則,l≤r

yl≤rl≤

ry,直接bre

ak

break

brea

k,這樣就是正確的

為什麼呢?

假設有乙個y′≥

yy'≥y

y′≥y

,使得對應的x′≤

rx'≤r

x′≤r

那麼y ≤y

′,x′

<

xy≤y',x'y≤

y′,x′x,

y]

[x,y]

[x,y]與[x′

,y′]

[x',y']

[x′,y′

]衝突,在做其中乙個區間的時候,另乙個肯定已經被刪掉了,所以不存在這種情況

複雜度o(n

log2

n)

o(nlog^2n)

o(nlog

2n),必須每次都low

er

lower

lower_bou

nd

bound

boun

d一下,因為set

setse

t的位址是不連續的

#include

#include

using

namespace std;

inline

chargc(

)inline

intrd()

char pbuf[

100000],

*pp=pbuf;

inline

voidpc(

char ch)

inline

void

wri(

int x)

inline

void

wln(

int x)

inline

void

flush()

struct node

}x;int n,l,r,ans;

char ch;

sets;

set::iterator it;

intmain()

);if(it!=s.

end(

)&& it-

>l<=r) s.

erase

(it)

,ans++

;else

break;}

s.insert

((node));

wln(ans);}

else

wln(s.

size()

);}flush()

;}

BZOJ 3566 SHOI2014 概率充電器

題目 題意 給定樹形結構的n個元件,每個元件有一定概率自己充電,還有一定概率通過某條邊給其他元件充電,求充電的元件期望個數。n 500000 題解 樹形結構肯定能想到樹形dp,全樹對某點產生的貢獻一般可以通過一到兩遍樹形dp計算得出,本題所求期望等於每個元件被充電的概率之和。設f i 表示i被充電的...

bzoj3566 SHOI2014 概率充電器

n個充電器連成一棵樹。第i個充電器有p i 的概率直接充電。每條導線有一定機率可以導電。可以導電的導線形成的聯通塊中只要存在直接充電的結點整個聯通塊的充電器均進入充電狀態。問期望進入充電狀態的充電器個數 顯然可知我們只需要得到f i 表示i進入充電狀態的概率 那麼a ns f i 我們把無根樹變有根...

BZOJ 4597 Shoi2016 隨機序列

很可做的一道題 考慮一下一段序列的答案為b x,x為最右連續一段是乘積,然後和為x,b則為對應的左邊的和 然後考慮在右邊加乙個數k,分類討論一下發現x kx,b 2x 3b 於是就可以dp了 然後dp可以矩陣轉移 於是就可以用線段樹維護矩陣 就水過去了 好像很簡單哎,ac率好高的說 include ...