basically allows for answering queries of a range [l, r] and updating values/ranges in O(lg(n)) so, for example, finding the minimum of elements in range [l, r] can be answered in log(n) rather than r - l + 1 basically, you divide up the array into pieces: this is the segtree for each "segment" you store the answer for the query [--------------- + x] [------ + x][-------] [--][-- + x][--][---] [-][-][x][-][-][-] usually way too advanced its super powerful b/c you can, for example find min/max/sum/gcd over ranges, while updating those values OR updating a [l, r] range of values, all in O(lgn) so, for example: - sum from l to r - update at index i - increase indices [l, r] by x ^ all in log(n) (pretty insane) yes, but i alr knew it before adv algos is tuff say i update something to x then i need to go back UP and update each segment so it takes: O(lg(n)) time too the problem: intervals don't cleanly overlap so if i do sum[0:n/2+2] i first get sum[0:n/2], then combine with sum[n/2:n/2+2] the "height" is O(log(n)), so in worst-case you traverse down the entire depth to combine the sum last thing: updating a value