
import math





class      _lowerCAmelCase :




				def __init__( self    ,    _UpperCamelCase					)    ->				Dict:
							lowerCAmelCase_      =     len(_UpperCamelCase					)
							lowerCAmelCase_      =     [0] * (
							    4 * self.N
							)  # approximate the overall size of segment tree with array N
							self.build(1    ,    0    ,    self.N - 1					)




				def 					__a						( self    ,    _UpperCamelCase					)    ->				List[str]:
							return idx * 2




				def 					__a						( self    ,    _UpperCamelCase					)    ->				Tuple:
							return idx * 2 + 1




				def 					__a						( self    ,    _UpperCamelCase    ,    _UpperCamelCase    ,    _UpperCamelCase					)    ->				int:  # noqa: E741
							if l == r:
										lowerCAmelCase_      =     A[l]
							else:
										lowerCAmelCase_      =     (l + r) // 2
										self.build(self.left(_UpperCamelCase					)    ,    _UpperCamelCase    ,    _UpperCamelCase					)
										self.build(self.right(_UpperCamelCase					)    ,    mid + 1    ,    _UpperCamelCase					)
										lowerCAmelCase_      =     max(self.st[self.left(_UpperCamelCase					)]    ,    self.st[self.right(_UpperCamelCase					)]					)




				def 					__a						( self    ,    _UpperCamelCase    ,    _UpperCamelCase    ,    _UpperCamelCase					)    ->				int:
							return self.update_recursive(1    ,    0    ,    self.N - 1    ,    a - 1    ,    b - 1    ,    _UpperCamelCase					)




				def 					__a						( self    ,    _UpperCamelCase    ,    _UpperCamelCase    ,    _UpperCamelCase    ,    _UpperCamelCase    ,    _UpperCamelCase    ,    _UpperCamelCase					)    ->				str:  # noqa: E741
							if r < a or l > b:
										return True
							if l == r:
										lowerCAmelCase_      =     val
										return True
							lowerCAmelCase_      =     (l + r) // 2
							self.update_recursive(self.left(_UpperCamelCase					)    ,    _UpperCamelCase    ,    _UpperCamelCase    ,    _UpperCamelCase    ,    _UpperCamelCase    ,    _UpperCamelCase					)
							self.update_recursive(self.right(_UpperCamelCase					)    ,    mid + 1    ,    _UpperCamelCase    ,    _UpperCamelCase    ,    _UpperCamelCase    ,    _UpperCamelCase					)
							lowerCAmelCase_      =     max(self.st[self.left(_UpperCamelCase					)]    ,    self.st[self.right(_UpperCamelCase					)]					)
							return True




				def 					__a						( self    ,    _UpperCamelCase    ,    _UpperCamelCase					)    ->				Optional[Any]:
							return self.query_recursive(1    ,    0    ,    self.N - 1    ,    a - 1    ,    b - 1					)




				def 					__a						( self    ,    _UpperCamelCase    ,    _UpperCamelCase    ,    _UpperCamelCase    ,    _UpperCamelCase    ,    _UpperCamelCase					)    ->				Any:  # noqa: E741
							if r < a or l > b:
										return -math.inf
							if l >= a and r <= b:
										return self.st[idx]
							lowerCAmelCase_      =     (l + r) // 2
							lowerCAmelCase_      =     self.query_recursive(self.left(_UpperCamelCase					)    ,    _UpperCamelCase    ,    _UpperCamelCase    ,    _UpperCamelCase    ,    _UpperCamelCase					)
							lowerCAmelCase_      =     self.query_recursive(self.right(_UpperCamelCase					)    ,    mid + 1    ,    _UpperCamelCase    ,    _UpperCamelCase    ,    _UpperCamelCase					)
							return max(_UpperCamelCase    ,    _UpperCamelCase					)




				def 					__a						( self					)    ->				int:
							lowerCAmelCase_      =     []
							for i in range(1    ,    N + 1					):
										show_list += [self.query(_UpperCamelCase    ,    _UpperCamelCase					)]
							print(_UpperCamelCase					)


if __name__ == "__main__":
			_A       =					[1, 2, -4, 7, 3, -5, 6, 11, -20, 9, 14, 15, 5, 2, -8]
			_A       =					15
			_A       =					SegmentTree(A)
			print(segt.query(4, 6))
			print(segt.query(7, 11))
			print(segt.query(7, 12))
			segt.update(1, 3, 1_11)
			print(segt.query(1, 15))
			segt.update(7, 8, 2_35)
			segt.show_data()








import json
import os
from dataclasses import dataclass

import numpy as np
import pyarrow as pa

import datasets
from utils import get_duration


_A       =					10_00_00_00_00_00
_A       =					1_00_00

_A,				_A       =					os.path.split(__file__)
_A       =					os.path.join(RESULTS_BASEPATH, "results", RESULTS_FILENAME.replace(".py", ".json"))






def        lowerCamelCase__    (    __lowerCAmelCase  :  int   ,							__lowerCAmelCase  :  int    ):




			"""simple docstring"""


			lowerCAmelCase_      =     pa.Table.from_pydict({"col": [0] * chunk_size}    )
			lowerCAmelCase_      =     pa.concat_tables([table] * (num_examples // chunk_size)    )
			return datasets.Dataset(__lowerCAmelCase   ,							fingerprint="table_100B"    )





@dataclass
class      _lowerCAmelCase :
				_lowercase      		=42
				_lowercase      		=42
				_lowercase      		=42
				_lowercase      		=42




				def 					__a						( self					)    ->				List[Any]:
							lowerCAmelCase_      =     np.random.default_rng(self.seed					)
							lowerCAmelCase_      =     rng.integers(low=self.low    ,    high=self.high    ,    size=self.size					).tolist()




				def __iter__( self					)    ->				List[str]:
							return iter(self._sampled_values					)




				def __len__( self					)    ->				Optional[int]:
							return self.size






@get_duration
def        lowerCamelCase__    (    __lowerCAmelCase  :  datasets.Dataset    ):




			"""simple docstring"""


			lowerCAmelCase_      =     dataset[0]






@get_duration
def        lowerCamelCase__    (    __lowerCAmelCase  :  datasets.Dataset    ):




			"""simple docstring"""


			lowerCAmelCase_      =     dataset[-1]






@get_duration
def        lowerCamelCase__    (    __lowerCAmelCase  :  datasets.Dataset    ):




			"""simple docstring"""


			lowerCAmelCase_      =     dataset[range(len(__lowerCAmelCase    ) // 2   ,							len(__lowerCAmelCase    ) // 2 + 1024    )]






@get_duration
def        lowerCamelCase__    (    __lowerCAmelCase  :  datasets.Dataset    ):




			"""simple docstring"""


			lowerCAmelCase_      =     dataset[RandIter(0   ,							len(__lowerCAmelCase    )   ,							1024   ,							seed=42    )]






def        lowerCamelCase__    (    ):




			"""simple docstring"""


			lowerCAmelCase_      =     {"num examples": SPEED_TEST_N_EXAMPLES}
			lowerCAmelCase_      =     (get_first_row, get_last_row, get_batch_of_aaaa_rows, get_batch_of_aaaa_random_rows)
			print("generating dataset"    )
			lowerCAmelCase_      =     generate_100B_dataset(num_examples=__lowerCAmelCase   ,							chunk_size=__lowerCAmelCase    )
			print("Functions"    )
			for func in functions:
						print(func.__name__    )
						lowerCAmelCase_      =     func(__lowerCAmelCase    )

			with open(__lowerCAmelCase   ,							"wb"    ) as f:
						f.write(json.dumps(__lowerCAmelCase    ).encode("utf-8"    )    )


if __name__ == "__main__":  # useful to run the profiler
			benchmark_table_100B()



