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 |
路过飘过,贴代码#include <iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<algorithm> using namespace std; const int maxn=50005; int a[maxn]; int c[maxn][20]; struct node{ int x,y,pos,P,L,R; node(int a=0):pos(a),P(0),L(0),R(0){} }p[maxn]; void RMQ(int n){ for(int j=1,k=2;k<=n;j++,k<<=1){ for(int i=1;i+k-1<=n;i++){ c[i][j]=p[c[i][j-1]].y<p[c[i+(k>>1)][j-1]].y?c[i][j-1]:c[i+(k>>1)][j-1]; } } } int query(int L,int R){ if(L>R)return 0; int len=R-L+1; int j,k; for(j=0,k=1;k<=len;j++,k<<=1); j--,k>>=1; //cout<<c[L][j-1]<<" "<<c[R-k+1][j-1]<<endl; return p[c[L][j]].y<p[c[R-k+1][j]].y?c[L][j]:c[R-k+1][j]; } int cmp(const void*a,const void*b){ struct node*t1=(node*)a; struct node*t2=(node*)b; return t1->x-t2->x; } int cmp1(const void*a,const void*b){ struct node*t1=(node*)a; struct node*t2=(node*)b; return t1->pos-t2->pos; } bool BuildTree(int L,int R){ if(L<=R){ int mindex=query(L,R); //cout<<p[mindex].pos<<" "<<p[mindex].x<<" "<<p[mindex].y<<endl; int mL=query(L,mindex-1); if(mL!=0){ BuildTree(L,mindex-1); if(p[mL].x>p[mindex].x)return false; p[mindex].L=p[mL].pos; p[mL].P=p[mindex].pos; } int mR=query(mindex+1,R); if(mR!=0){ BuildTree(mindex+1,R); if(p[mR].x<p[mindex].x)return false; p[mindex].R=p[mR].pos; p[mR].P=p[mindex].pos; } return true; } //return false; } int main() { // freopen("in.txt","r",stdin); int n; scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d%d",&p[i].x,&p[i].y); p[i].pos=i; } qsort(p+1,n,sizeof(p[0]),cmp); for(int i=1;i<=n;i++){ c[i][0]=i; } RMQ(n); bool f=BuildTree(1,n); if(!f){ printf("NO\n"); } else { printf("YES\n"); qsort(p+1,n,sizeof(p[0]),cmp1); for(int i=1;i<=n;i++){ printf("%d %d %d\n",p[i].P,p[i].L,p[i].R); } } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator