線段樹 騷操作

2021-09-29 04:46:46 字數 2254 閱讀 2230

vases and flowers

-題意 alice有n個花瓶(標號為0~ n-1)。當她收到一些花時,她會隨機的選擇乙個瓶子a,從它開始遍歷a,a+1, a+2, …, n-1號瓶子,遇到空瓶子就放一朵花進去,直到花朵放完或沒有瓶子,剩下的花將被丟棄。有時,她也會清理標號從a到b的花瓶(a <= b).花瓶裡的花會被丟棄。

input

第一行乙個整數t,表示資料組數。

每組資料,第一行乙個整數n(1 < n < 50001) and m(1 < m < 50001). n 是花瓶個數, m 是alice的操作次數. 接下來m行 行3個 整數. 第乙個整數 k(1 or 2). 如果k=1, 後面跟兩個整數 a 和 f . 表示alice 得到了f 朵花並且把它們放入從a 的花瓶裡. 如果k= 2, 後跟兩個整數 a 和 b. 表示alice 清理的花瓶標號範圍(a <= b).

output

對於每個k=1的操作,輸出第一朵和最後一朵花放置的花瓶標號。如果沒有任何放花的位置,輸出'can not put any one.'.對於k=2的操作,輸出丟棄花的個數.

每組資料後輸出乙個空行.

思路:這題用線段樹表示每個花瓶的狀態,花瓶為空時 為 1 ,花瓶有花時 為 0 然後tree[node],表示這個區間有多少個1 也就是有多少個空花瓶。

對於操作 1 a f 我們可以查詢 a 到 n中第 f 個花瓶是多少,然後找到第 f 個花瓶的位置 x ,將 a到x的區間所有元素修改為 0 也就是花瓶不為空 ,然後就是簡單線段樹區間修改了。

對於 操作 2 a f 也就是簡單的區間查詢 因為線段樹維護的是 某個區間 空花瓶的個數 要想知道有花的花瓶的個數, 拿區間總共的花瓶減去空花瓶的個數。

難點 : 對於 查詢 區間a 到 n 的 第 f 個空花瓶是多少 。我們可以 先查詢 1到a的區間空花瓶 個數 假設空花瓶個數為cnt 然後我們只要查 區間 1到n 第cnt+f 個空花瓶是多少就可以了。 類似與權值線段樹找1 到 n 的第 k大。

#include

using

namespace std;

const

int n=

5e5+7;

int tree[

4*n]

,add[

4*n]

,n;// 1表示花瓶為空 0 表示花瓶不為空

#define lson 2*node

#define rson 2*node+1

#define m (l+r)/2

void

build

(int l,

int r,

int node)

build

(l,m,lson)

;build

(m+1

,r,rson)

; tree[node]

=tree[lson]

+tree[rson];}

void

push_down

(int node,

int nl,

int nr)

else

if(add[node]==0

)}intquery_c

(int ql,

int qr,

int l,

int r,

int node)

intquery

(int k,

int ql,

int qr,

int l,

int r,

int node)

void

update

(int v,

int ql,

int qr,

int l,

int r,

int node)

push_down

(node,m-l+

1,r-m);if

(ql<=m)

update

(v,ql,qr,l,m,lson);if

(qr>m)

update

(v,ql,qr,m+

1,r,rson)

; tree[node]

=tree[lson]

+tree[rson];}

intmain()

else

if(cntelse

}else

}printf

("\n");

}}

E Let Them Slide 線段樹騷操作

e.let them slide 題意 就是每行可能有可滑動的一行資料,詢問每列的最大和。題解 我們維護一行資料的每個位置對固定一行位置的貢獻,可滑動的資料可以對固定的多個位置有貢獻,所以我們維護一顆可以區間更新最大值和最小值的線段樹,然後再維護乙個sum o 陣列,代表那一段區間的最優解sum o...

(線段樹操作)

題意 選取a序列的一段 l,r 將選中的區間按非降排序。問能否經過若干次操作後形成b序列 分析 b序列的數的總類及各個類的數目一定要與a序列相同 對b的每個位置的值,找到與之相同的a序列中還沒有被用的位置nowpos,然後判斷1到nowpos的最小值是否等於b序列的當前值,再將該位置修改為無效值 若...

mysql騷操作 Mysql騷操作 優化大分頁查詢

系統結構如上圖。經過排查是因為系統b拉取資料時間太長導致的推送超時。系統b拉取資料的方法是根據 tiemstamp 資料操作時間 分頁查詢系統a的介面,即 1select?欄位名2from?表名3where?timestamp?begintime?and?timestamp?endtime?4lim...