/*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