playground updated

This commit is contained in:
Hizenberg469
2024-11-30 23:25:28 +05:30
parent 9415c7f0c7
commit b46c486580
20 changed files with 837 additions and 566 deletions

View File

@@ -1,68 +1,68 @@
#include <bits/stdc++.h>
using namespace std;
class Fenwick_Tree{
public:
// 1 based indexing...
vector<int> tree;
int sz;
void init(int n, const vector<int>& arr){
tree.resize(n+1,0);
this->sz = n;
for(int i = 1 ; i <= sz ; i++ ){
update(i, arr[i-1]);
}
}
int sum(int k){
int s = 0;
while(k >= 1){
s += tree[k];
k -= k & -k;
}
return s;
}
void update(int k, int val){
while( k <= sz ){
tree[k] += val;
k += k & -k;
}
}
void print(){
for(int i = 1 ; i <= sz ; i++ ){
cout << tree[i] << ' ';
}
cout << '\n';
}
};
int main(){
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
return 0;
#include <bits/stdc++.h>
using namespace std;
class Fenwick_Tree{
public:
// 1 based indexing...
vector<int> tree;
int sz;
void init(int n, const vector<int>& arr){
tree.resize(n+1,0);
this->sz = n;
for(int i = 1 ; i <= sz ; i++ ){
update(i, arr[i-1]);
}
}
int sum(int k){
int s = 0;
while(k >= 1){
s += tree[k];
k -= k & -k;
}
return s;
}
void update(int k, int val){
while( k <= sz ){
tree[k] += val;
k += k & -k;
}
}
void print(){
for(int i = 1 ; i <= sz ; i++ ){
cout << tree[i] << ' ';
}
cout << '\n';
}
};
int main(){
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
return 0;
}

View File

@@ -1,89 +1,89 @@
#include <bits/stdc++.h>
using namespace std;
class SegmentTree{
int sz;
vector<int> tree;
public:
SegmentTree(const vector<int>& arr){
this->sz = arr.size();
tree.resize(2*this->sz+1,0);
init(arr);
}
void init(const vector<int>& arr){
for(int i = sz-1 ; i >= 0 ; i-- )
tree[i+sz] = arr[i];
for(int i = sz - 1 ; i >= 1 ; i-- ){
tree[i] = tree[2*i] + tree[2*i+1];
}
}
void print(){
cout << "Size : " << sz << '\n';
for(int i = 0 ; i <= 2*sz ; i++ ){
cout << tree[i] << ' ';
}
cout << '\n';
}
int sum( int a, int b){
int s = 0;
a += sz , b += sz;
while( a <= b ){
if( a%2 == 1 ) s += tree[a++];
if( b%2 == 0 ) s += tree[b--];
a /= 2 , b /= 2;
}
return s;
}
void add(int k, int x) {
k += sz;
tree[k] += x;
for (k /= 2; k >= 1; k /= 2) {
tree[k] = tree[2*k]+tree[2*k+1];
}
}
};
int main(){
vector<int> arr = {5,8,6,3,2,7,2,6};
SegmentTree stree(arr);
stree.print();
stree.add(7,1);
cout << "(2,7) : " << stree.sum(2,7) << '\n';
return 0;
#include <bits/stdc++.h>
using namespace std;
class SegmentTree{
int sz;
vector<int> tree;
public:
SegmentTree(const vector<int>& arr){
this->sz = arr.size();
tree.resize(2*this->sz+1,0);
init(arr);
}
void init(const vector<int>& arr){
for(int i = sz-1 ; i >= 0 ; i-- )
tree[i+sz] = arr[i];
for(int i = sz - 1 ; i >= 1 ; i-- ){
tree[i] = tree[2*i] + tree[2*i+1];
}
}
void print(){
cout << "Size : " << sz << '\n';
for(int i = 0 ; i <= 2*sz ; i++ ){
cout << tree[i] << ' ';
}
cout << '\n';
}
int sum( int a, int b){
int s = 0;
a += sz , b += sz;
while( a <= b ){
if( a%2 == 1 ) s += tree[a++];
if( b%2 == 0 ) s += tree[b--];
a /= 2 , b /= 2;
}
return s;
}
void add(int k, int x) {
k += sz;
tree[k] += x;
for (k /= 2; k >= 1; k /= 2) {
tree[k] = tree[2*k]+tree[2*k+1];
}
}
};
int main(){
vector<int> arr = {5,8,6,3,2,7,2,6};
SegmentTree stree(arr);
stree.print();
stree.add(7,1);
cout << "(2,7) : " << stree.sum(2,7) << '\n';
return 0;
}

View File

@@ -1,49 +1,49 @@
#include <bits/stdc++.h>
using namespace std;
//Sparse Table for minimum value query.
vector<vector<int>> table;
void precomputeSparseTable(int n, vector<int>& arr){
int lPower = log2(n);
table.resize(n+1,vector<int>(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<int> arr(n);
for(int i = 0 ; i < n ; i++ ){
cin>>arr[i];
}
precomputeSparseTable(n,arr);
#include <bits/stdc++.h>
using namespace std;
//Sparse Table for minimum value query.
vector<vector<int>> table;
void precomputeSparseTable(int n, vector<int>& arr){
int lPower = log2(n);
table.resize(n+1,vector<int>(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<int> arr(n);
for(int i = 0 ; i < n ; i++ ){
cin>>arr[i];
}
precomputeSparseTable(n,arr);
}