From 73eb166aebc60fb4f21c57b0be476f911b9f2be8 Mon Sep 17 00:00:00 2001 From: Hizenberg Date: Thu, 11 Apr 2024 10:15:34 +0530 Subject: [PATCH] Min Sparse Table --- Range Queries/minSparseTable.cpp | 49 ++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 Range Queries/minSparseTable.cpp diff --git a/Range Queries/minSparseTable.cpp b/Range Queries/minSparseTable.cpp new file mode 100644 index 0000000..4e3ae89 --- /dev/null +++ b/Range Queries/minSparseTable.cpp @@ -0,0 +1,49 @@ +#include + +using namespace std; + + +//Sparse Table for minimum value query. + +vector> table; + +void precomputeSparseTable(int n, vector& arr){ + + int lPower = log2(n); + + table.resize(n+1,vector(lPower+1)); + + for(int p = 0 ; p <= lPower ; p++ ){ + for(int i = 0 ; i + pow(2,p) - 1 <= n ; i++ ){ + if( p == 0 ){ + table[i][p] = arr[i]; + continue; + } + + table[i][p] = min(table[i][p-1],table[i+pow(2,p-1)][p-1]); + } + } + + // for(int i = 0 ; i <= n ; i++ ){ + // cout << i << " : "; + // for(int p = 0 ; p <= lPower ; p++ ){ + // cout << table[i][p] << " "; + // } + // cout << endl; + // } +} + +int main(int argc,char* argv[]){ + + ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); + + int n,q; + cin>>n>>q; + + vector arr(n); + for(int i = 0 ; i < n ; i++ ){ + cin>>arr[i]; + } + + precomputeSparseTable(n,arr); +} \ No newline at end of file