刷題總結 旅館(bzoj1593線段樹)

2022-05-23 13:12:11 字數 2474 閱讀 9311

奶牛們最近的旅遊計畫,是到蘇必利爾湖畔,享受那裡的湖光山色,以及明媚的陽光。作為整個旅遊的策劃者和負責人,貝茜選擇在湖邊的一家著名的旅館住宿。這個巨大的旅館一共有n (1 <= n <= 50,000)間客房,它們在同一層樓中順次一字排開,在任何乙個房間裡,只需要拉開窗簾,就能見到波光粼粼的湖面。 貝茜一行,以及其他慕名而來的旅遊者,都是一批批地來到旅館的服務台,希望能訂到d_i (1 <= d_i <= n)間連續的房間。服務台的接待工作也很簡單:如果存在r滿足編號為r..r+d_i-1的房間均空著,他就將這一批顧客安排到這些房間入住;如果沒有滿足條件的r,他會道歉說沒有足夠的空房間,請顧客們另找一家賓館。如果有多個滿足條件的r,服務員會選擇其中最小的乙個。 旅館中的退房服務也是批量進行的。每乙個退房請求由2個數字x_i、d_i 描述,表示編號為x_i..x_i+d_i-1 (1 <= x_i <= n-d_i+1)房間中的客人全部離開。退房前,請求退掉的房間中的一些,甚至是所有,可能本來就無人入住。 而你的工作,就是寫乙個程式,幫服務員為旅客安排房間。你的程式一共需要處理m (1 <= m < 50,000)個按輸入次序到來的住店或退房的請求。第乙個請求到來前,旅店中所有房間都是空閒的。

* 第1行: 2個用空格隔開的整數:n、m

* 第2..m+1行: 第i+1描述了第i個請求,如果它是乙個訂房請求,則用2個數字 1、d_i描述,數字間用空格隔開;如果它是乙個退房請求,用3 個以空格隔開的數字2、x_i、d_i描述

* 第1..??行: 對於每個訂房請求,輸出1個獨佔1行的數字:如果請求能被滿足 ,輸出滿足條件的最小的r;如果請求無法被滿足,輸出0

10 6

1 31 3

1 31 3

2 5 5

1 6147

05線段樹維護區間連續最大值,區間左端點連續值,區間右端點連續值即可·····

我這裡tag標記打了兩個··乙個訂房乙個退房···注意在打其中乙個標記時把另外乙個標記清空·····

#include#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

const

int n=5e4+5

;int n,m,trle[n*4],trri[n*4],trmx[n*4],tagclear[n*4],tagfull[n*4

];inline

intr()

inline

void update(int k,int l,int r,int

mid)

inline

void build(int k,int l,int

r)

int mid=(l+r)/2

; build(k*2,l,mid);build(k*2+1,mid+1

,r);

update(k,l,r,mid);

}inline

void pushdown(int k,int l,int r,int

mid)

if(tagclear[k]) }

inline

void full(int k,int l,int r,int x,int

y)

int mid=(l+r)/2

;pushdown(k,l,r,mid);

if(x<=mid) full(k*2

,l,mid,x,y);

if(y>mid) full(k*2+1,mid+1

,r,x,y);

update(k,l,r,mid);

}inline

void clear(int k,int l,int r,int x,int

y)

int mid=(l+r)/2

;pushdown(k,l,r,mid);

if(x<=mid) clear(k*2

,l,mid,x,y);

if(y>mid) clear(k*2+1,mid+1

,r,x,y);

update(k,l,r,mid);

}inline

int find(int k,int l,int r,int

x)

else

if(trmx[k*2]>=x) return find(k*2

,l,mid,x);

else

if(trri[k*2]+trle[k*2+1]>=x)

else

if(trmx[k*2+1]>=x) return find(k*2+1,mid+1

,r,x);

else

if(trri[k]>=x) }

intmain()

if(op==2

)

} return0;

}

bzoj1593 預定旅館 線段樹維護連續區間

題解 這題非常經典啊似乎。經典模型要記住啊。對於每個節點維護該區間裡的最大的連續區間,然後我們就可以logn遞迴找最前面的一段。那就維護mx 無限制 lmx 必須從左邊開始 rmx 必須從右邊開始 1 include2 include3 include4 include5 include6 incl...

bzoj1593 預定旅館 線段樹維護連續區間

題解 這題非常經典啊似乎。經典模型要記住啊。對於每個節點維護該區間裡的最大的連續區間,然後我們就可以logn遞迴找最前面的一段。那就維護mx 無限制 lmx 必須從左邊開始 rmx 必須從右邊開始 1 include2 include3 include4 include5 include6 incl...

刷題總結 作詩(bzoj2821)

神犇sjy虐完heoi之後給傻 lyd出了一題 shy是t國的公主,平時的一大愛好是作詩。由於時間緊迫,shy作完詩 些漢字構成詩。因為shy喜歡對偶,所以shy規定最後選出的每個漢字都必須在 l,r 裡出現了正偶數次。而且shy認 為選出的漢字的種類數 兩個一樣的漢字稱為同一種 越多越好 為了拿到...