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 |
线段树G++TLE C++AC#include<cstdio> #include<iostream> #include<algorithm> #include<cmath> #include<climits> using namespace std; const int MAXN =1e6+10; typedef pair<int,int> P; int ans[2][MAXN]; struct tree { int l,r; int maxn; int minn; }; tree arr[MAXN*4+1]; int a[MAXN]; P buildtree(int l,int r,int k) { arr[k].l=l; arr[k].r=r; if(l==r) { arr[k].maxn=a[l]; arr[k].minn=a[l]; return P(arr[k].maxn,arr[k].minn); } int m=(l+r)>>1; P p1=buildtree(l,m,k<<1); P p2=buildtree(m+1,r,(k<<1)+1); int mm=max(p1.first,p2.first); int mii=min(p1.second,p2.second); arr[k].maxn=mm; arr[k].minn=mii; return P(mm,mii); } P query(int L,int R,int l,int r,int k) { if(L<=l&&r<=R) return P(arr[k].maxn,arr[k].minn); int m=(l+r)>>1; P p1=P(INT_MIN,INT_MAX),p2=P(INT_MIN,INT_MAX); if(L<=m) { p1=query(L,R,l,m,k<<1); } if(R>m) { p2=query(L,R,m+1,r,(k<<1)+1); } return P(max(p1.first,p2.first),min(p1.second,p2.second)); } int main() { int n; while(~scanf("%d",&n)) { int k; scanf("%d",&k); k--; for(int i=0;i<n;++i) { scanf("%d",&a[i]); } buildtree(0,n-1,1); int p=0; for(int i=0;k<n;++i,++k) { P temp=query(i,k,0,n-1,1); ans[0][p]=temp.second; ans[1][p]=temp.first; p++; } for(int i=0;i<2;++i) { for(int j=0;j<p;++j) { if(j!=p-1) printf("%d ",ans[i][j]); else printf("%d\n",ans[i][j]); } } } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator