Bobjoehi

SegTree

Nov 21st, 2020 (edited)
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.94 KB | None | 0 0
  1. import java.util.*;
  2. import java.io.*;
  3. public class SegTree {
  4.    
  5.     static int[] segTree;
  6.    
  7.     static int build(int l, int r, int i, int[] ar) {
  8.         if(l == r) {
  9.             segTree[i] = ar[l];
  10.             return segTree[i];
  11.         }
  12.        
  13.         int mid = (l + r) / 2;
  14.         segTree[i] = Math.min(build(l, mid, i * 2, ar), build(mid + 1, r, i * 2 + 1, ar));
  15.         return segTree[i];
  16.     }
  17.    
  18.     static void update(int l, int r, int i, int index, int v) {
  19.         if(l == r) {
  20.             segTree[i] = v;
  21.             return;
  22.         }
  23.         int mid = (l + r) / 2;
  24.         if(index <= mid) {
  25.             update(l, mid, i * 2, index, v);
  26.         }else {
  27.             update(mid + 1, r, i * 2 + 1, index, v);
  28.         }
  29.         segTree[i] = Math.min(segTree[i * 2], segTree[i * 2 + 1]);
  30.     }
  31.    
  32.     static int query(int l, int r, int ql, int qr, int i) {
  33.         if(l > qr || r < ql) {
  34.             return Integer.MAX_VALUE;
  35.         }
  36.         if(ql <= l && qr >= r) {
  37.             return segTree[i];
  38.         }
  39.         int mid = (l + r) / 2;
  40.         return Math.min(query(l, mid, ql, qr, i * 2), query(mid + 1, r, ql, qr, i * 2 + 1));
  41.     }
  42.    
  43.     public static void main(String[] args) throws IOException{
  44.         readLine();
  45.         int n = nextInt(), m = nextInt();
  46.        
  47.         int[] ar = new int[n];
  48.        
  49.         int size = 0;
  50.         int counter = n;
  51.         while(counter > 0) {
  52.             size += n;
  53.             counter >>= 1;
  54.         }
  55.         segTree = new int[size + 1];
  56.        
  57.         for(int i = 0; i < n; i ++) {
  58.             readLine();
  59.             ar[i] = nextInt();
  60.         }
  61.        
  62.         build(0, n - 1, 1, ar);
  63.        
  64.         for(int i = 0; i < m; i ++) {
  65.             readLine();
  66.             char c = nextChar();
  67.             switch(c) {
  68.             case 'M':
  69.                 update(0, n - 1, 1, nextInt(), nextInt());
  70.                 break;
  71.             case 'Q':
  72.                 System.out.println(query(0, n - 1, nextInt(), nextInt(), 1));
  73.             }
  74.         }
  75.     }
  76.     static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
  77.     static StringTokenizer st;
  78.     static void readLine() throws IOException{
  79.         st = new StringTokenizer(in.readLine());
  80.     }
  81.     static int nextInt() {
  82.         return Integer.parseInt(st.nextToken());
  83.     }
  84.     static char nextChar() {
  85.         return st.nextToken().charAt(0);
  86.     }
  87. }
  88.  
Advertisement
Add Comment
Please, Sign In to add comment