#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
long int n;
struct node *l,*r;
}node;
typedef node * tree;
tree maknod(long int d)
{
tree t;
t=(tree)malloc(sizeof(tree));
t->n=d;
t->l=t->r=NULL;
return t;
}
tree ins(tree t,long int d)
{
if(t==NULL)
return maknod(d);
else if(t->n > d)
t->l=ins(t->l,d);
else
t->r=ins(t->r,d);
return t;
}
long int findmax(tree t)
{
if(t->r==NULL)
return (t->n);
findmax(t->r);
}
tree del(tree t,long int d)
{
if(t!=NULL)
{
if(t->n==d)
{
if(t->l==NULL && t->r==NULL)
return NULL;
if(t->l==NULL)
return t->r;
if(t->r==NULL)
return t->l;
t->n=findmax(t->l);
t->l=del(t->l,t->n);
}
if(t->n>d)
t->l=del(t->l,d);
if(t->n<d)
t->r=del(t->r,d);
}
return t;
}
long int print(tree t)
{
if(t->r==NULL)
return t->n;
print(t->r);
}
int main()
{
long int num,k,i;
tree t=NULL;
scanf("%ld ",&num);
long int a[num];
for(i=0;i<num;i++)
scanf("%ld",&a[i]);
scanf("%ld",&k);
for(i=0;i<k;i++)
{
t=ins(t,a[i]);
}
for(i=0;i<=num-k;i++)
{
if(i<num-k)
{
printf("%ld",print(t));
printf(" ");
}
else
printf("%ld",print(t));
t=del(t,a[i]);
ins(t,a[i+k]);
}
return 0;
}
http://ideone.com/ZA3Xb 在 spoj 中运行五个测试用例,在第六个测试用例中作为分段错误运行.. 给定 num 不是数组中的元素,那么 a[] 包含 num 个元素.. k 是子数组.. 我们必须在 a[] 中的每个大小为 k 的子数组中打印最大元素。