樹套樹專題

2022-05-20 03:28:05 字數 2338 閱讀 6030

對資料結構的不熟練

題目鏈結

嘗試一下樹狀陣列套主席樹的寫法。

小細節沒有重視:為了方便起見,一般我們寫getrank(x)求的都是

1 #include2

const

int maxn = 50035;3

const

int maxnode = 5000035;4

const

int inf = 2147483647;5

6struct

node

7f[maxnode];

10struct

qrs11

qr[maxn];

14int n,m,rt[maxn],v[maxn],tot,cnt[maxn<<1

];15

intcntl,cntr,l[maxn],r[maxn];

1617

intread()

1827

void update(int &rt, int l, int r, int c, int

d)28

36int rank(int l, int r, int

c)3748}

49for (int i=l-1; i; i-=i&-i)

5058}59

return

ret;60}

61int ask(int l, int r, int

k)62

else76}

77void getrank(int l, int r, int

k)78

83int

main()

8494 cnt[++cnt[0]] = inf, cnt[++cnt[0]] = -inf;

95 std::sort(cnt+1, cnt+cnt[0]+1

);96 cnt[0] = std::unique(cnt+1, cnt+cnt[0]+1)-cnt-1;97

for (int i=1; i<=n; i++)

98103

for (int opt, i=1; i<=m; i++)

104111

if (opt==3

)118

if (opt==4

)123

if (opt==5

)128

}129

return0;

130 }

題目鏈結

樹套樹維護區間逆序對個數;每一次修改只需要處理一下修改前後對答案的正負貢獻。

1 #include2

const

int maxn = 20035;3

const

int maxnode = 7000035;4

5struct

node

6f[maxnode];

9int

n,m,h[maxn],cnt[maxn];

10int

tot,rt[maxn],cntl,cntr,svl[maxn],svr[maxn];

11long

long

ans,tmp;

1213

intread()

1423

void update(int &rt, int l, int r, int c, int

d)24

32void query(int rt, int l, int r, int l, int

r)33

39int mid = (l+r)>>1;40

if (l <=mid) query(f[rt].l, l, r, l, mid);

41if (r > mid) query(f[rt].r, l, r, mid+1

, r);42}

43long

long fndquery(int lp, int rp, int l, int

r)44

53void backtrack(int l, int r, int l, int r, int

f)54

58int

main()

5969 m =read();

70for (int i=1; i<=n; i++)

71 backtrack(1, i-1, h[i]+1, cnt[0], 1

);72 printf("

%lld\n

",ans);

73for (int i=1; i<=m; i++)

7494

return0;

95 }

模板 樹套樹

xsy2685 lg3380 bzoj3196 tyvj1730 二逼平衡樹 1.查詢k在區間內的排名 乙個數的排名是小於這個數的個數 1 2.查詢區間內排名為 k 的值 3.修改某一位值上的數值 4.查詢 k 在區間內的前驅 前驅定義為小於 x 且最大的數 5.查詢 k 在區間內的後繼 後繼定義為...

樹套樹 線段樹套set

請你寫出一種資料結構,來維護乙個長度為 n 的序列,其中需要提供以下操作 1 pos x,將 pos 位置的數修改為 x。2 l r x,查詢整數 x 在區間 l,r 內的前驅 前驅定義為小於 x,且最大的數 數列中的位置從左到右依次標號為 1 n。區間 l,r 表示從位置 l 到位置 r 之間 包...

初學樹套樹 線段樹套Treap

樹套樹是乙個十分神奇的演算法,種類也有很多 像什麼樹狀陣列套主席樹 樹狀陣列套值域線段樹 zkw 線段樹套 vector 等等。不過,像我這麼弱,當然只會最經典的線段樹套 treap 啦。線段樹我相信大家都會的,treap 可以看一下這篇部落格 簡析平衡樹 二 treap 線段樹套 treap 的思...