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 |
Re:请教大牛,我初学这个线段数,我的代码怎么wa掉了In Reply To:请教大牛,我初学这个线段数,我的代码怎么wa掉了 Posted by:skogt at 2010-10-28 09:59:49 > #include<iostream> > #include<cstring> > #include<algorithm> > #include<cstdlib> > using namespace std; > struct TREE > { > int l, r, p; > int min,max; > }tree[4*1000000]; > int data[1000005]; > void build(int l, int r, int p) > { > tree[p].l=l; > tree[p].r=r; > if(l==r) > { > tree[p].min=tree[p].max=data[l]; > return ; > } > int mid = (l+r)>>1; > build(l, mid, 2*p); > build(mid + 1, r, 2*p+1); > tree[p].min=min(tree[2*p].min,tree[2*p+1].min); > tree[p].max=max(tree[2*p].max,tree[2*p+1].max); > } > int minl[1000005],maxl[1000005]; > void query(int l,int r,int& min,int& max,int p) > { > if(tree[p].l == l && tree[p].r == r) > { > min = tree[p].min; > max = tree[p].max; > return ; > } > int mid = (tree[p].l + tree[p].r)>>1; > if(mid >= r) > query(l,r,min,max,p*2); > else if(mid<l) > query(l,r,min,max,p*2+1); > else > { > int max2,min2; > query(l,mid,min,max,p*2); > query(mid+1,r,min2,max2,p*2+1); > min=min<min2?min:min2; > max=max>max2?max:max2; > } > } > int main() > { > int n,k; > int i; > while(scanf("%d%d",&n,&k)!=EOF) > { > for(i=1;i<=n;i++) > scanf("%d",&data[i]); > build(1,n,1); > int maxt,mint; > for(i=1;i<=n-k+1;i++) > { > query(i,i+k-1,mint,maxt,1); > minl[i]=mint; > maxl[i]=maxt; > } > for(i=1;i<=n-k;i++) > printf("%d ",minl[i]); > printf("%d\n",minl[i]); > for(i=1;i<=n-k;i++) > printf("%d ",maxl[i]); > printf("%d\n",maxl[i]); > } > return 0; > } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator