划分树模板

Posted pb2016

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了划分树模板相关的知识,希望对你有一定的参考价值。

 1 ///划分树模板,找区间第k小的数
 2 const int mx=1e5+5;
 3 int tree[30][mx];
 4 int sortt[mx];
 5 int sum[30][mx];
 6 
 7 void build(int l,int r,int c)
 8 {
 9     if (l==r) return ;
10     int m=(l+r)>>1;
11     int isame=m-l+1;
12     int pl=l,pr=m+1;
13     for (int i=l;i<m;i++)
14         if (tree[c][i]<sortt[m]) isame--;
15     for (int i=l;i<=r;i++){
16         if (i==l) sum[c][i]=0;
17         else sum[c][i]=sum[c][i-1];
18         if (tree[c][i]<sortt[m]){
19             tree[c+1][pl++]=tree[c][i];
20             sum[c][i]++;
21         }
22         else if ( tree[c][i]==sortt[m]&&isame){
23             isame--;
24             tree[c+1][pl++]=tree[c][i];
25             sum[c][i]++;
26         }
27         else tree[c+1][pr++]=tree[c][i];
28     }
29     build(l,m,c+1);
30     build(m+1,r,c+1);
31 }
32 
33 int query(int L,int R,int l,int r,int c,int k){
34     if (L==R) return tree[c][L];
35     int s,ss;
36     if (l==L){
37         s=0;
38         ss=sum[c][r];
39     }
40     else{
41         s=sum[c][l-1];
42         ss=sum[c][r]-s;
43     }
44     int m=(L+R)>>1;
45     if (k<=ss) return query(L,m,L+s,L+s+ss-1,c+1,k);
46     return query(m+1,R,m+1+l-L-s,m+1+r-L-s-ss,c+1,k-ss);
47 }

 

以上是关于划分树模板的主要内容,如果未能解决你的问题,请参考以下文章

poj 2104 (划分树模板)

划分树(poj2104)

2021-12-24:划分字母区间。 字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。返回一个表示每个字符串片段的长度的列表。 力扣763。某大厂面试

VSCode自定义代码片段——.vue文件的模板

划分树+二分HDU 4417 Super Mario

如何使用 xcode 将快照划分为多个片段,以便让用户与每个片段进行交互?