190 lines
4.0 KiB
Java
190 lines
4.0 KiB
Java
|
/*This is a Java Program to Implement Fenwick Tree. A Fenwick tree or binary indexed tree is a data structure providing efficient methods for calculation and manipulation of the prefix sums of a table of values.*/
|
||
|
|
||
|
/**
|
||
|
* Java Program to Implement Fenwick Tree
|
||
|
**/
|
||
|
import java.util.Scanner;
|
||
|
|
||
|
/** Class Fenwick Tree **/
|
||
|
public class FenwickTree
|
||
|
{
|
||
|
/** Function to update tree **/
|
||
|
private void update(int[] arr, int pos, int val)
|
||
|
{
|
||
|
int len = arr.length;
|
||
|
for (; pos < len; pos |= (pos + 1))
|
||
|
arr[pos] += val;
|
||
|
}
|
||
|
/** Function to query **/
|
||
|
private int query(int[] arr, int pos)
|
||
|
{
|
||
|
int sum = 0;
|
||
|
for (; pos >= 0; pos = (pos & (pos + 1)) - 1)
|
||
|
sum += arr[pos];
|
||
|
return sum;
|
||
|
}
|
||
|
|
||
|
/** Main method **/
|
||
|
public static void main(String[] args)
|
||
|
{
|
||
|
Scanner scan = new Scanner( System.in );
|
||
|
System.out.println("Fenwick Tree Test\n");
|
||
|
/** Accept number of elements **/
|
||
|
System.out.println("Enter number of integer elements");
|
||
|
int n = scan.nextInt();
|
||
|
/** Create integer array on n elements **/
|
||
|
int arr[] = new int[ n ];
|
||
|
FenwickTree ft = new FenwickTree();
|
||
|
/** update or find sum **/
|
||
|
char ch;
|
||
|
do
|
||
|
{
|
||
|
System.out.println("\nFenwick Tree Operations\n");
|
||
|
System.out.println("1. update ");
|
||
|
System.out.println("2. query");
|
||
|
int choice = scan.nextInt();
|
||
|
switch (choice)
|
||
|
{
|
||
|
case 1 :
|
||
|
System.out.println("Enter position and value to update");
|
||
|
ft.update(arr, scan.nextInt(), scan.nextInt() );
|
||
|
break;
|
||
|
case 2 :
|
||
|
System.out.println("Enter position to find sum till nth element");
|
||
|
try
|
||
|
{
|
||
|
System.out.println("Sum = "+ ft.query(arr, scan.nextInt()) );
|
||
|
}
|
||
|
catch (Exception e)
|
||
|
{
|
||
|
System.out.println("\nError! Out of bounds\n");
|
||
|
}
|
||
|
break;
|
||
|
default :
|
||
|
System.out.println("Wrong Entry \n ");
|
||
|
break;
|
||
|
}
|
||
|
System.out.println("\nDo you want to continue (Type y or n) \n");
|
||
|
ch = scan.next().charAt(0);
|
||
|
}
|
||
|
while (ch == 'Y'|| ch == 'y');
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
Fenwick Tree Test
|
||
|
|
||
|
Enter number of integer elements
|
||
|
5
|
||
|
|
||
|
Fenwick Tree Operations
|
||
|
|
||
|
1. update
|
||
|
2. query
|
||
|
1
|
||
|
Enter position and value to update
|
||
|
0 5
|
||
|
|
||
|
Do you want to continue (Type y or n)
|
||
|
|
||
|
y
|
||
|
|
||
|
Fenwick Tree Operations
|
||
|
|
||
|
1. update
|
||
|
2. query
|
||
|
1
|
||
|
Enter position and value to update
|
||
|
1 4
|
||
|
|
||
|
Do you want to continue (Type y or n)
|
||
|
|
||
|
y
|
||
|
|
||
|
Fenwick Tree Operations
|
||
|
|
||
|
1. update
|
||
|
2. query
|
||
|
1
|
||
|
Enter position and value to update
|
||
|
2 3
|
||
|
|
||
|
Do you want to continue (Type y or n)
|
||
|
|
||
|
y
|
||
|
|
||
|
Fenwick Tree Operations
|
||
|
|
||
|
1. update
|
||
|
2. query
|
||
|
1
|
||
|
Enter position and value to update
|
||
|
3 2
|
||
|
|
||
|
Do you want to continue (Type y or n)
|
||
|
|
||
|
y
|
||
|
|
||
|
Fenwick Tree Operations
|
||
|
|
||
|
1. update
|
||
|
2. query
|
||
|
1
|
||
|
Enter position and value to update
|
||
|
4 0
|
||
|
|
||
|
Do you want to continue (Type y or n)
|
||
|
|
||
|
y
|
||
|
|
||
|
Fenwick Tree Operations
|
||
|
|
||
|
1. update
|
||
|
2. query
|
||
|
2
|
||
|
Enter position to find sum till nth element
|
||
|
1
|
||
|
Sum = 9
|
||
|
|
||
|
Do you want to continue (Type y or n)
|
||
|
|
||
|
y
|
||
|
|
||
|
Fenwick Tree Operations
|
||
|
|
||
|
1. update
|
||
|
2. query
|
||
|
2
|
||
|
Enter position to find sum till nth element
|
||
|
2
|
||
|
Sum = 12
|
||
|
|
||
|
Do you want to continue (Type y or n)
|
||
|
|
||
|
y
|
||
|
|
||
|
Fenwick Tree Operations
|
||
|
|
||
|
1. update
|
||
|
2. query
|
||
|
2
|
||
|
Enter position to find sum till nth element
|
||
|
3
|
||
|
Sum = 14
|
||
|
|
||
|
Do you want to continue (Type y or n)
|
||
|
|
||
|
y
|
||
|
|
||
|
Fenwick Tree Operations
|
||
|
|
||
|
1. update
|
||
|
2. query
|
||
|
2
|
||
|
Enter position to find sum till nth element
|
||
|
4
|
||
|
Sum = 14
|
||
|
|
||
|
Do you want to continue (Type y or n)
|
||
|
|
||
|
n
|