線段樹 資料結構 NOIP2017列隊

2021-08-28 03:32:00 字數 1521 閱讀 2987

很簡單的線段樹水題。。。不知道為啥一年前不會。。。

每行開乙個線段樹,最後一列再開乙個線段樹。

對每個操作分兩種情況討論:在最後一列,不在最後一列。

如果不在最後一列,現在行線段樹上把那個位置刪去,在列線段樹末尾插入它。並且找到列線段樹對應的行的值,把他從列線段樹中刪除,加入到行線段樹中去。

用動態加點的方式可以避免tle和mle

#include

#include

#include

#include

#define sf scanf

#define pf printf

#define maxn 15000100

using namespace std;

void

read

(int

&x)typedef

long

long ll;

int n,m,q,cnt;

int tree[maxn]

;ll val[maxn]

;int tag[maxn]

;int ls[maxn]

,rs[maxn]

;void

pushdown

(int x,

int l,

int r)

void

add(

int id,

int l,

int r,

int pl,

int pr,

int val)

int mid=

(l+r)

>>1;

if(pl<=mid)

if(pr>mid)

tree[id]

=tree[ls[id]

]+tree[rs[id]];

}pairint>

que(

int id,

int l,

int r,

int k)

int mid=

(l+r)

>>1;

if(tree[ls[id]

]>=k)

else

}void

addval

(int id,

int l,

int r,

int pos,ll v)

int mid=

(l+r)

>>1;

if(pos<=mid)

else

tree[id]

=tree[ls[id]

]+tree[rs[id]];

}int len[maxn]

;int

main()

add(n+1,

1,n+q,

1,n,1)

; len[n+1]

=n;int x,y;

for(

int i=

1;i<=q;i++

)else

}}

NOIP2017整數 線段樹

題目背景 在人類智慧型的山巔,有著一台字長為10485761048576 位 此數字與解題無關 的超級計算機,著名理論計算機科 學家p博士正用它進行各種研究。不幸的是,這天颱風切斷了電力系統,超級計算機 無法工作,而 p 博士明天就要交實驗結果了,只好求助於學過oi的你.題目描述 p 博士將他的計算...

資料結構 線段樹

啦啦啦啦啦啦線段樹是個好東西 好吧並沒有什麼好的 但貌似還是很好啊 線段樹就是一棵樹!顧名思義 又是這個詞 就是求關於一段的某些什麼什麼東西。比如區間最大值啊什麼的。引用百科知識 線段樹是一種二叉搜尋樹,與區間樹相似,它將乙個區間劃分成一些單元區間,每個單元區間對應線段樹中的乙個葉結點。對於線段樹中...

資料結構 線段樹

一 目標 1.如何快速的查詢出下列陣列arr 2,5 的和 2。以及更新arr 4 為6。用普通的方法查詢的複雜度為o n 更新的複雜度為o 1 這時候我們可以用線段樹來快速完成這些操作,複雜度為logn。二 內容 如何建立,查詢,更新線段樹。public class qurqpd int tree...