Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 89ef96a

Browse filesBrowse files
authored
Merge pull request dubesar#18 from RajatSvN/master
Segment Tree Implementation in Java
2 parents 5f71582 + bd90ed0 commit 89ef96a
Copy full SHA for 89ef96a

File tree

Expand file treeCollapse file tree

1 file changed

+84
-0
lines changed
Filter options
Expand file treeCollapse file tree

1 file changed

+84
-0
lines changed

‎SegmentTree101.java

Copy file name to clipboard
+84Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
import java.util.*;
2+
public class SegmentTree101 {
3+
4+
static void createTree(int[] inp ,int[] tree, int start ,int end , int treeNodeIndex){
5+
6+
if(start == end){
7+
tree[treeNodeIndex] = inp[start];
8+
return;
9+
}
10+
11+
int mid = (start+end)/2;
12+
13+
createTree(inp,tree,start,mid,2*treeNodeIndex);
14+
createTree(inp,tree,mid+1,end,(2*treeNodeIndex)+1);
15+
16+
tree[treeNodeIndex] = tree[treeNodeIndex*2] + tree[treeNodeIndex*2+1];
17+
18+
}
19+
20+
static void updateTree(int[] inp, int[] tree,int start , int end , int treeNodeIndex , int idx , int value){
21+
22+
if(start==end){
23+
// we have reached the node that needs to be changed
24+
tree[treeNodeIndex] = value;
25+
return;
26+
}
27+
28+
29+
int mid = (start + end) / 2 ;
30+
31+
if(idx > mid){
32+
// going towards the right subtree
33+
updateTree(inp,tree,mid+1,end,2*treeNodeIndex+1,idx,value);
34+
}else{
35+
// going towards the left subtree
36+
updateTree(inp,tree,start,mid,2*treeNodeIndex,idx,value);
37+
}
38+
39+
tree[treeNodeIndex] = tree[2*treeNodeIndex] + tree[2*treeNodeIndex + 1];
40+
41+
}
42+
43+
static int query(int[] tree,int start , int end , int treeNodeIndex , int left , int right){
44+
45+
46+
// range is completely out of given NodeIndex
47+
if(right < start || end < left){
48+
return 0;
49+
}
50+
51+
// completely inside the given Node Range
52+
if(start>=left && end<=right){
53+
return tree[treeNodeIndex];
54+
}
55+
56+
// partially inside ans Partially outside the given Range
57+
int mid = (start + end)/2 ;
58+
59+
int ans1 = query(tree,start,mid,2*treeNodeIndex,left,right);
60+
int ans2 = query(tree,mid+1,end,2*treeNodeIndex+1,left,right);
61+
62+
return ans1+ans2 ;
63+
64+
65+
66+
}
67+
68+
public static void main(String[] args) {
69+
70+
Scanner fs = new Scanner(System.in);
71+
int n = fs.nextInt();
72+
73+
int inp[] = new int[n];
74+
int tree[] = new int[4*n];
75+
for(int i=0 ; i<n ; i++){
76+
inp[i] = fs.nextInt();
77+
}
78+
createTree(inp,tree,0,n-1,1);
79+
for(int i=0 ; i<4*n ; i++){
80+
System.out.println(tree[i]);
81+
}
82+
83+
}
84+
}

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.