1 D配列ストレージセグメントツリーはどのくらいの配列を開きますか?
import java.util.Scanner;
/* Power By:Comzyh*/
class segment {//
int b,e;
}
public class SegmentTree{// ,
static int M=5000000;
segment seg[];
int Nnode;//
int LastNode;//
public SegmentTree(){
seg=new segment[M];
for(int i=0;i<M;i++)
seg[i]=new segment();
}
void build(int b, int e, int root){//
Nnode++;
if (root>LastNode)
LastNode=root;
seg[root].b=b;
seg[root].e=e;
if (b==e)
return;
int mid =(b+e)>>1;
build(b,mid,root<<1);
build(mid+1,e,(root<<1)+1);
}
public int getNnode(){
return Nnode;
}
public int getLastNode(){
return LastNode;
}
public static void main(String args[]){
Scanner in=new Scanner(System.in);
int N;
while (true){
System.out.printf(" :
");
N=in.nextInt();
if (N==0) break;
SegmentTree st=new SegmentTree();
st.build(1,N,1);
System.out.printf(" , %d , : %d
",st.getNnode(),st.getLastNode());
// : 2N-1
}
}
}
実行:
C:\ex>java SegmentTree
区間の長さを入力してください:
5
線分ツリーの構造が完了し、9ノードがあり、最後のノードは:9
区間の長さを入力してください:
10
線分ツリーの構造は19ノードで完了し、最後のノードは:25
区間の長さを入力してください:
100000
セグメントツリーの構造が完了し、199999ノードがあり、最後のノードは262141です.
ソース: