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:线段树In Reply To:线段树 Posted by:1340502116 at 2016-02-09 15:19:39 > #include"cstdio" > #include"cstring" > #include"algorithm" > using namespace std; > const int INF=0x7fffffff; > const int MAXN=1000005; > struct Node{ > int l,r; > int min,max; > }a[MAXN*3]; > int V,k; > void build(int l,int r,int n) > { > a[n].l=l; > a[n].r=r; > if(l==r) > { > scanf("%d",&a[n].min); > a[n].max=a[n].min; > return ; > } > int mid=(l+r)>>1; > build(l,mid,n<<1); > build(mid+1,r,(n<<1)|1); > a[n].min=min(a[n<<1].min,a[(n<<1)|1].min); > a[n].max=max(a[n<<1].max,a[(n<<1)|1].max); > } > int query(int l,int r,int n,int type) > { > if(a[n].l==l&&a[n].r==r) > { > if(type==1) return a[n].min; > else return a[n].max; > } > int mid=(a[n].l+a[n].r)>>1; > if(r<=mid) return query(l,r,n<<1,type); > else if(mid<l) return query(l,r,(n<<1)|1,type); > else > { > if(type==1) return min(query(l,mid,n<<1,type),query(mid+1,r,(n<<1)|1,type)); > else return max(query(l,mid,n<<1,type),query(mid+1,r,(n<<1)|1,type)); > } > } > int main() > { > while(scanf("%d%d",&V,&k)!=EOF) > { > build(1,V,1); > for(int i=1;i<=V-k+1;i++) > printf("%d ",query(i,i+k-1,1,1)); > printf("\n"); > for(int i=1;i<=V-k+1;i++) > printf("%d ",query(i,i+k-1,1,2)); > 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