poj2828
題目大意:排隊,每個人可以有乙個可插入的序號,可以直接排到那個位置去;
最重要的點就是在有序號i的人的前面,1~i-1的序號已經出現了;
逆推,因為在最後面的人是不受約束的,不會因為還有人排隊進來而改變自己在佇列當中的序號。又因為在他的前面是有i個人的序號是比他小的,那麼他得留出來i個位置給那些人占領。
#include
using
namespace std;
const
int max_n=
200020
;int data[max_n<<2]
;int ans[max_n]
;void
init
(int l,
int r,
int p)
init
(l,(l + r)/2
, p *2+
1);init
((l + r)/2
, r, p *2+
2);}
void
updata
(int t,
int x,
int l,
int r,
int p)
if(data[p *2+
1]> t)
else
data[p]
= data[p *2+
1]+ data[p *2+
2];}
int a[max_n]
, b[max_n]
;int
main()
for(
int i = n; i >=
1; i--
)for
(int i =
0; i < n; i++
) cout<}}
線段樹 建樹 單點修改 單點 區間查詢
線段樹 sgement tree 是一種分治思想的二叉樹結構,用於在區間上進行資訊統計。與按照二進位制位進行區間劃分的樹狀陣列相比,線段樹是一種更加通用的結構 1.線段樹的每個節點都代表乙個區間。2.線段樹具有唯一的根節點,代表的區間是整個統計範圍,如 1,n 3.線段樹的每個葉節點都代表乙個長度為...
線段樹區間修改和查詢和單點查詢(線段樹模板1)
如題,已知乙個數列,你需要進行下面兩種操作 將某區間每乙個數加上 kk。求出某區間每乙個數的和。第一行包含兩個整數 n,mn,m,分別表示該數列數字的個數和操作的總個數。第二行包含 nn 個用空格分隔的整數,其中第 ii 個數字表示數列第 ii 項的初始值。接下來 mm 行每行包含 33 或 44 ...
單點更新,區間查詢線段樹
線段樹的空間複雜度是4n include include include using namespace std const int maxn 100005 const int inf 0x3f3f3f3f int n,a maxn struct node 結點 tree maxn 4 樹結點儲存陣...