Advertisement
anasretdinov

SegmenTree

Apr 3rd, 2020
490
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.42 KB | None | 0 0
  1. import java.util.ArrayList;
  2. import java.util.PriorityQueue;
  3. import java.util.Scanner;
  4.  
  5. public class Main {
  6.     static Scanner s = new Scanner(System.in);
  7.     static int next2(int n){
  8.         int k = 0;
  9.         while (n > 1){
  10.             if (n % 2 == 1) n++;
  11.             k++;
  12.             n /= 2;
  13.         }
  14.         return k;
  15.     }
  16.     static int spow(int k){
  17.         int sum = 1;
  18.         for (int i = 0; i < k; i++) {
  19.             sum *= 2;
  20.         }
  21.         return sum;
  22.     }
  23.     public static void main(String[] args) {
  24.         int t = s.nextInt();
  25.         for (int ngnnnjg = 0; ngnnnjg < t; ngnnnjg++) {
  26.  
  27.             int n = s.nextInt();
  28.             int q = s.nextInt();
  29.             int real = spow(next2(n));
  30.             int [] aa = new int [real+1];
  31.             int [] tree = new int [2*real+1];
  32.             for (int jfr = 0; jfr < q; jfr++) {
  33.                 int qu = s.nextInt();
  34.                 if (qu == 1){
  35.                     int index = s.nextInt();
  36.                     int k = s.nextInt();
  37.                     index = index+real;
  38.                     int razn = k-tree[index];
  39.                     while (index > 0){
  40.                         tree[index] += razn;
  41.                         index /= 2;
  42.                     }
  43.                 }
  44.                 else{
  45.                     int l = s.nextInt();
  46.                     int r = s.nextInt();
  47.                     int sum = 0;
  48.                     r += real;
  49.                     l+=real;
  50.                     for (int x:
  51.                          tree) {
  52.                         System.out.print(x + " ");
  53.                     }
  54.                     System.out.println();
  55.                     while (r >= l){
  56.                         if (r % 2 == 0){
  57.                             sum += tree[r];
  58.                             r--;
  59.                         }
  60.                         if (l % 2 == 1){
  61.                             sum += tree[l];
  62.                             l++;
  63.                         }
  64.                         l/=2;
  65.                         r/=2;
  66.                     }
  67.                     System.out.println(sum);
  68.                 }
  69.             }
  70.         }
  71.     }
  72. }
  73. class Pair implements Comparable<Pair>{
  74.     int x;
  75.     int y;
  76.     Pair(int x, int y){
  77.         this.x = x;
  78.         this.y = y;
  79.     }
  80.     @Override
  81.     public int compareTo(Pair pair) {
  82.         if (this.x == pair.x) return this.y - pair.y; else return this.x - pair.x;
  83.     }
  84. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement