Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

我还没学会二叉平衡树的调整,高手们能指点下本题的调整吗?

Posted by rabbit0404 at 2006-07-24 12:19:40 on Problem 2352
#include <iostream>
using namespace std;
int lc[15001],rc[15001],point[15001],flag[15001],num[15001],f;
int Root;
void add(int i,int j,int x)
{
    if(point[x]<point[i])
    {
        num[i]++;
        if(lc[i]==-1)
        {
            lc[i]=x;
            flag[j]++;
            f=0;
        }
        else{
            f=0;
            add(lc[i],j,x);
        }
    }
    else{
        if(rc[i]==-1)
        {
//            if(f==0)
                flag[j+1]++;
//            else if(f==1)
//                flag[j]++;
            rc[i]=x;
            f=0;
         }
        else{
             f=1;
             add(rc[i],num[i]+j+1,x);
        }
    }
}
void show()
{
}
int main()
{
    int i,j,N;
    while(scanf("%d",&N)!=EOF)
    {
        int pos=0;
/*        if(N==0)
        {
            printf("0\n");
            continue;
        }*/
        f=0;
        memset(lc,-1,sizeof(lc));
        memset(rc,-1,sizeof(rc));
        memset(flag,0,sizeof(flag));
        memset(num,0,sizeof(num));
        scanf("%d%d",&point[pos],&j);
        flag[0]++;
        Root=0;
        for(pos=1;pos<N;pos++)
        {
            scanf("%d%d",&point[pos],&j);
            add(Root,0,pos);
            show();
        }
        for(i=0;i<N;i++)
            cout<<flag[i]<<endl;
    }
    
    return 0;
}
/*
5
1 1
5 1
7 1
3 3
5 5
*/

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator