Guest User

Untitled

a guest
Oct 16th, 2019
201
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.09 KB | None | 0 0
  1. import java.io.*;
  2. import java.util.*;
  3. import java.lang.*;
  4.  
  5.  
  6. public class seg_tree {
  7.  
  8.     public static class ss{ int s; int end;int index;ss(int s,int end,int index){this.s=s;this.end=end; this.index=index;} }
  9.  
  10.     public static int[] build(int[] v,int size)
  11.     {
  12.         int arr[]= new int[2*size];
  13.         for(int i=0;i<size;i++)
  14.         {
  15.             arr[size+i]=v[i];
  16.         }
  17.  
  18.         for(int i=size-1;i>=1;i--)
  19.         {
  20.             arr[i]=arr[2*i]+arr[2*i+1];
  21.         }
  22.         return(arr);
  23.     }
  24.  
  25.     public static void range_query(int[] v,int size,int start,int end)
  26.     {
  27.         Stack<ss> stack= new Stack<ss>();
  28.         stack.push(new ss(0,0,1));
  29.         int sum=0;
  30.  
  31.         int s=0;
  32.         int e=size-1;
  33.         int mid=0;
  34.  
  35.         if(start<=s && end>=e){
  36.             int val = (stack.pop()).index;
  37.             sum=sum+v[val];
  38.         }
  39.         else if(start>e || end<s)
  40.         {
  41.             sum=-1;
  42.         }
  43.  
  44.         else{
  45.             int val = (stack.pop()).index;
  46.             mid=(s+e)/2;
  47.             stack.push(new ss(s,mid,2*val));
  48.             stack.push(new ss(mid+1,e,(2*val)+1));
  49.         }
  50.  
  51.         while(!stack.empty())
  52.         {
  53.             ss temp=(stack.pop());
  54.             int val=(temp).index;s=temp.s;e=temp.end;
  55.  
  56.             if(start<=s && end>=e)
  57.             {
  58.                 sum=sum+v[val];
  59.             }
  60.             else if (start>e || end<s) {
  61.                 sum=sum+0;             
  62.             }
  63.             else
  64.             {
  65.                 mid=(s+e)/2;
  66.                 stack.push(new ss(s,mid,2*val));
  67.                 stack.push(new ss(mid+1,e,(2*val)+1));         
  68.             }
  69.  
  70.         }
  71.  
  72.         System.out.println(sum);
  73.     }
  74.  
  75.  
  76.     public static int[] update(int[] v,int size,int index,int val)
  77.     {
  78.         int curr=v[size+index];
  79.         int diff=val-curr;
  80.         v[size+index]=val;
  81.         int move=(size+index)/2;
  82.         while(move>0)
  83.         {
  84.             v[move]=v[move]+diff;
  85.             move=move/2;
  86.         }
  87.  
  88.         return(v);
  89.     }
  90.  
  91.  
  92.     public static void prints(int[] arr,int size){
  93.         for(int i=0;i<size;i++)
  94.         {
  95.             System.out.print(arr[i]+" ");
  96.         }
  97.         System.out.println();
  98.     }
  99.     public static void main(String[] args) throws java.lang.Exception {
  100.         Scanner sc =new Scanner(System.in);
  101.         // seg_tree st=new seg_tree();
  102.         int[] v={2,3,5,6,7,9,10,11};
  103.         int size=8;
  104.  
  105.         int[] tree=build(v,8);
  106.         prints(tree,size*2);
  107.  
  108.  
  109.         // tree=update(tree,size,2,2);
  110.         // tree=update(tree,size,7,10);
  111.         // prints(tree,size*2);
  112.         range_query(tree,size,0,4);
  113.  
  114.  
  115.        
  116.     }
  117.    
  118. }
Add Comment
Please, Sign In to add comment