I have written following C++ program which is giving me
SIGSIGV Error for very large input.
Basically the following program outputs Number smaller than current number in an array.I have use BST and array to implement.
#include <iostream>
using namespace std;
struct bst {
long long int data;
struct bst *right;
struct bst *left;
};
struct bst *head=NULL;
//function to increment
void increment(struct bst *node,long long int w[]) {
if(node==NULL)
return;
w[node->data] += 1;
increment(node->left,w);
increment(node->right,w);
}
void insert(long long int data,long long int w[]){
struct bst *node;
struct bst *current;
current=head;
if(head==NULL) {
node = new bst;
node->data = data;
node->right = NULL;
node->left=NULL;
head=node;
}else {
while(1) {
if(data > current->data){
if(current->right!=NULL)
current=current->right;
else {
node = new bst;
node->data = data;
node->right = NULL;
node->left=NULL;
current->right=node;
break;
}
}
else{
if(current->left!=NULL){
//if data is less than current number than incremet 1 in right sub tree of current node
//and current node
w[current->data] +=1;
increment(current->right,w);
current=current->left;
}
else {
node = new bst;
node->data = data;
node->right = NULL;
node->left=NULL;
current->left=node;
//if data is less than current number than incremet 1 in right sub tree of current node
//and current node
w[current->data] +=1;
increment(current->right,w);
break;
}
}
}
}
}
void deletenode(struct bst *node) {
if(node == NULL)
return;
deletenode(node->left);
deletenode(node->right);
delete(node);
}
int main() {
int t;
cin>>t;
while(t--) {
long long int n;long long int counter=0;
cin>>n;
long long int a[n];
//array to keep count of numbers which are less than index of w[i]
long long int w[1000000]={0};
for(long long int i=0;i<n;i++) {
cin>>a[i];
insert(a[i],w);
}
for(long long int i=0;i<n;i++) {
cout<<w[a[i]]<<" ";
}
cout<<"n";
//deleting BST
deletenode(head);
head=NULL;
}
return 0;
}
Any help appreciated.