Pagini recente » Cod sursa (job #2365125) | Cod sursa (job #1461099) | Cod sursa (job #2247830) | Cod sursa (job #2897373) | Cod sursa (job #2752134)
#include <stdio.h>
#include <stdlib.h>
typedef struct type_element{
int key, val_subsir;
} element;
typedef struct type_node{
element *actual, *info_left;
struct type_node *left, *right;
} node;
int *anterior, k;
element *maxim, *nou;
element *add_node(node *root, element *next){
//printf("%d ", root->actual->key);
if(next->key==root->actual->key){
//if(root->info_left)
if(root->info_left && next->val_subsir < root->info_left->val_subsir){
next->val_subsir=root->info_left->val_subsir;
// next->val_subsir++;
anterior[k]=root->info_left->key;
}
next->val_subsir++;
if(root->actual->val_subsir < next->val_subsir){
free(root->actual);
root->actual=next;
if(next->val_subsir > maxim->val_subsir){
maxim=next;
}
}
return root->actual;
}
if(next->key > root->actual->key){
if(root->info_left){
if(root->actual->val_subsir > root->info_left->val_subsir){
if(next->val_subsir<root->actual->val_subsir){
next->val_subsir=root->actual->val_subsir;
anterior[k]=root->actual->key;
}
}
else{
if(next->val_subsir<root->info_left->val_subsir){
next->val_subsir=root->info_left->val_subsir;
anterior[k]=root->info_left->key;
}
}
}
else{
if(next->val_subsir < root->actual->val_subsir){
next->val_subsir=root->actual->val_subsir;
anterior[k]=root->actual->key;
}
}
if(root->right){
add_node(root->right, next);
}
else{
root->right=calloc(1, sizeof(node));
(next->val_subsir)++;
root->right->actual=next;
if(next->val_subsir > maxim->val_subsir){
maxim=next;
}
}
return next;
}
if(root->left){
add_node(root->left, next);
if(next->val_subsir > root->info_left->val_subsir){
root->info_left=next;
}
}
else{
root->left=calloc(1, sizeof(node));
next->val_subsir++;
root->left->actual=next;
root->info_left=next;
if(next->val_subsir > maxim->val_subsir){
maxim=next;
}
}
return next;
}
int main()
{
FILE *pf=fopen("grader_test1.in", "r");
int n, a=1;
fscanf(pf, "%d", &n);
anterior=calloc(n, sizeof(int));
node* root=calloc(1, sizeof(node));
nou=calloc(1, sizeof(element));
fscanf(pf, "%d", &nou->key);
nou->val_subsir=1;
root->actual=nou;
maxim=nou;
for(k=0; k<n-1; k++){
//a++;
nou=calloc(1, sizeof(element));
fscanf(pf, "%d", &nou->key);
// printf("%d\n", nou->key);
add_node(root, nou);
//printf("%d %d\n", maxim->key, maxim->val_subsir);
}
//printf("%d", a);
fclose(pf);
pf=fopen("scmax.out", "w");
fprintf(pf, "%d", maxim->val_subsir);
fclose(pf);
return 0;
}