| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
求救~~DEV都过了,却是无限次的CE,囧!!!#include<stdio.h>
#include<malloc.h>
#define Max 1000005
struct tree
{
int b,e;
int min,max;
struct tree *lchild,*rchild;
};
int a[Max];
struct tree * build(int b,int e)
{
struct tree *root=(struct tree*)malloc(sizeof(struct tree));
int mid;
if(b == e)
{
root->b=root->e=e;
root->min=root->max=a[b];
root->lchild=root->rchild=NULL;
return root;
}
mid=(int)(b+e)/2;
root->b=b;
root->e=e;
root->lchild=build(b,mid);
root->rchild=build(mid+1,e);
root->min=root->lchild->min > root->rchild->min ? root->rchild->min :root->lchild->min;
root->max=root->lchild->max > root->rchild->max ? root->lchild->max : root->rchild->max;
return root;
}
int find_max(int b,int e,struct tree * root)
{
if(root == NULL)
return -32768;
if(b > root->e || e < root->b)
return -32768;
if(b <= root->b && e >= root->e)
return root->max;
int maxl=find_max(b,e,root->lchild);
int maxr=find_max(b,e,root->rchild);
if(maxl > maxr)
return maxl;
return maxr;
}
int find_min(int b,int e,struct tree *root)
{
if(root == NULL)
return 32767;
if(e < root->b || b > root->e)
return 32767;
if(b <= root->b && e >= root->e)
return root->min;
int minl=find_min(b,e,root->lchild);
int minr=find_min(b,e,root->rchild);
if(minl < minr)
return minl;
return minr;
}
int main()
{
int i,j;
int num,step;
int min,max;
scanf("%d%d",&num,&step);
i=0;
while(i<num)
scanf("%d",&a[i++]);
struct tree * root=build(0,num-1);
for(i=0;i<=num-step;i++)
{
min=find_min(i,i+step-1,root);
max=find_max(i,i+step-1,root);
printf("%d ",min);
a[i]=max;
}
printf("\n");
for(i=0;i<=num-step;i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator