export default DenseDataExtrema1D;
/**
 * @template {ArrayLike<number>} [T=ArrayLike<number>]
 */
declare class DenseDataExtrema1D<T extends ArrayLike<number> = ArrayLike<number>> {
    /**
     * This module efficiently computes extrema of arbitrary subsets of a given data array.
     * The array is subdivided into 'numSubsets' subsets where extrema are precomputed.
     * These values are used to compute extrema given arbitrary start and end indices via
     * the getMinNonZeroInSubset and getMaxNonZeroInSubset methods.
     * @param {T}  data
     */
    constructor(data: T);
    /** @type {number} */
    epsilon: number;
    /** @type {T} */
    data: T;
    /** @type {number} */
    tileSize: number;
    /** @type {number} */
    paddedTileSize: number;
    /** @type {number} */
    numSubsets: number;
    /** @type {number} */
    subsetSize: number;
    subsetMinimums: number[];
    subsetMaximums: number[];
    minNonZeroInTile: number;
    maxNonZeroInTile: number;
    /**
     * Computes the non-zero minimum in a subset using precomputed values,
     * if possible. data[end] is not considered.
     *
     * @param {[start: number, end: number]} indexBounds
     * @return {number} non-zero minium of the subset
     */
    getMinNonZeroInSubset(indexBounds: [start: number, end: number]): number;
    /**
     * Computes the non-zero maximum in a subset using precomputed values, if possible
     *
     * @param {[start: number, end: number]}  indexBounds
     * @return {number} non-zero maxium of the subset
     */
    getMaxNonZeroInSubset(indexBounds: [start: number, end: number]): number;
    /**
     * Precomputes non-zero minimums of subsets of the given data vector
     *
     * @returns {Array<number>} - Minimums of the regularly subdivided data vector
     */
    computeSubsetNonZeroMinimums(): Array<number>;
    /**
     * Precomputes non-zero maximums of subsets of the given data vector
     * @return {Array<number>} Maximums of the regularly subdivided data vector
     */
    computeSubsetNonZeroMaximums(): Array<number>;
    /**
     * Computes the non-zero minimum in the entire data array using precomputed values
     *
     * @return {number} Non-zeros maximum of the data
     */
    getMinNonZeroInTile(): number;
    /**
     * Computes the non-zero maximum in the entire data array using precomputed values
     *
     * @return {number} Non-zeros maximum of the data
     */
    getMaxNonZeroInTile(): number;
    /**
     * Calculate the minimum non-zero value in the data from start
     * to end. No precomputations are used to compute the min.
     *
     * @param {ArrayLike<number>} data
     * @param {number} start
     * @param {number} end
     * @return {number} non-zero min in subset
     */
    minNonZero(data: ArrayLike<number>, start: number, end: number): number;
    /**
     * Calculate the maximum non-zero value in the data from start
     * to end. No precomputations are used to compute the max.
     *
     * @param {ArrayLike<number>} data
     * @param {number} start
     * @param {number} end
     * @return {number} non-zero max in subset
     */
    maxNonZero(data: ArrayLike<number>, start: number, end: number): number;
}
