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"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