Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit d931aab

Browse files
Create Readme.md
1 parent 2bd117e commit d931aab

File tree

1 file changed

+9
-0
lines changed
  • Segment_Tree/2286.Booking-Concert-Tickets-in-Groups

1 file changed

+9
-0
lines changed
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
### 2286.Booking-Concert-Tickets-in-Groups
2+
3+
根据题意,我们需要给维护一个数组seats,代表每一行剩余的座椅数目。
4+
5+
如果遇到的是scatter,那么我们就从前往后查看每一行,有任何剩余的座位就都分配出去。如果某一行的座位都已经被scatter分配完了,那么这意味着该行及其之前的行都没有空座了,今后可以忽略。所以我们需要一个指针p,来指向当前仍有作为剩余的最小行号。但是这里有一个问题,如果对于某个scatter query,我们试图一行一行地去查询和分配座位后,发现无法满足要求(所有分配的座位必须在指定的maxRow之前)。于是我们需要有一个函数,支持查看[0,maxRow]这个区间内还剩多少个座位。如果查询得知剩余座位不够,就可以直接返回false。如果查询得知剩余座位足够,我们再逐行更新```seats[p]```,将分配完所有座位的行号都置零。显然,这是区间求和,这需要一个选段树或者BIT的数据结构。
6+
7+
如果遇到的是gather,那么我们就需要找到最小的行号i,满足```seats[i]>=k```.那么如何高效地实现这个功能呢?也是用线段树。我们需要一个函数,支持查询[0,row]这个区间内的最大值。我们可以通过二分法,快速查到满足条件的最小的row。那么我们就可以更新```seats[row]-=k```.
8+
9+
所以,我们需要利用两种线段树的模板,分别实现查询rangeSum和rangeMax的功能。当然,也要支持节点数值的动态修改。

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /