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 |
居然不是TL 而是WA·· 疑惑不解 谁指导下#include<iostream> using namespace std; int x[100000],fmax,fmin; struct itree { int left,right; int imax,imin; itree *lc,*rc; }; struct pp { int imax,imin; }; pp btree(itree *h) { int tmid; pp j,k; tmid=(h->left+h->right)/2; if(h->left==h->right) { h->imax=x[h->left]; h->imin=h->imax; j.imax=h->imax; j.imin=h->imin; return j; } itree *q,*p; q=new itree; p=new itree; h->lc=q; h->rc=p; q->lc=0; q->rc=0; p->lc=0; p->rc=0; q->left=h->left; q->right=tmid; p->left=tmid+1; p->right=h->right; j=btree(q); k=btree(p); j.imax=j.imax>k.imax?j.imax:k.imax; j.imin=j.imin<k.imin?j.imin:k.imax; h->imax=j.imax; h->imin=j.imin; return j; } void qtree(itree *h,int ll,int rr) { int tmid; tmid=(h->left+h->right)/2; if(ll==h->left && rr==h->right) { if(fmax<h->imax || fmax==-1) fmax=h->imax; if(fmin>h->imin || fmin==-1) fmin=h->imin; return ; } if(rr<=tmid) qtree(h->lc,ll,rr); else if(ll>tmid) qtree(h->rc,ll,rr); else { qtree(h->lc,ll,tmid); qtree(h->rc,tmid+1,rr); } } void bl(itree *h) { cout<<h->left<<"--"<<h->right<<":"<<h->imax<<" "<<h->imin<<endl; if(h->lc) bl(h->lc); if(h->rc) bl(h->rc); } int main() { itree *h; int i,j,k,n,q; scanf("%d%d",&n,&q); for(i=1;i<=n;++i) { scanf("%d",&x[i]); } h=new itree; h->left=1; h->right=n; btree(h); // bl(h); for(i=0;i<q;++i) { fmax=-1; fmin=-1; scanf("%d%d",&j,&k); qtree(h,j,k); cout<<fmax-fmin<<endl; } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator