poj2823(堆)

来源:互联网 发布:新剑侠情缘mac下载 编辑:程序博客网 时间:2024/05/23 10:58
#include<stdio.h>#include<stdlib.h>#include<math.h>#include<string.h>#include<time.h>#define For(i,j,k) for(i=j;i<=k;++i)int n,k,x,a[1000010],xg[1000010],dg[1000010],xgsum,dgsum,t,minn[1000010],maxx[1000010],p1[1000010],p2[1000010];int ins(int xx){int t,tmp;xg[++xgsum]=xx;t=xgsum;while (t>1&&a[xg[t]]<a[xg[t/2]]) {p1[xg[t/2]]=t;tmp=xg[t];xg[t]=xg[t/2];xg[t/2]=tmp;t/=2;}p1[xx]=t;dg[++dgsum]=xx;t=dgsum;while (t>1&&a[dg[t]]>a[dg[t/2]]) {p2[dg[t/2]]=t;tmp=dg[t];dg[t]=dg[t/2];dg[t/2]=tmp;t/=2;}p2[xx]=t;}void dec(int xx){int tt,tmp,ttt;tt=p1[xx];p1[xg[xgsum]]=tt;xg[tt]=xg[xgsum];--xgsum;while (a[xg[tt]]>a[xg[tt*2]]&&tt*2<=xgsum||a[xg[tt]]>a[xg[tt*2+1]]&&tt*2+1<=xgsum) {if (tt*2+1<=xgsum&&a[xg[tt*2]]>a[xg[tt*2+1]]) ttt=tt*2+1;else ttt=tt*2;p1[xg[tt]]=ttt;p1[xg[ttt]]=tt;tmp=xg[tt];xg[tt]=xg[ttt];xg[ttt]=tmp;tt=ttt;}tt=p2[xx];p2[dg[dgsum]]=tt;dg[tt]=dg[dgsum];--dgsum;while (a[dg[tt]]<a[dg[tt*2]]&&tt*2<=dgsum||a[dg[tt]]<a[dg[tt*2+1]]&&tt*2+1<=dgsum) {if (tt*2+1<=dgsum&&a[dg[tt*2]]<a[dg[tt*2+1]]) ttt=tt*2+1;else ttt=tt*2;p2[dg[tt]]=ttt;p2[dg[ttt]]=tt;tmp=dg[tt];dg[tt]=dg[ttt];dg[ttt]=tmp;tt=ttt;}}/*int sca(){int t=0,tt=1;char c;while (1) {c=getchar();if (c==' '||c==EOF||c=='\n')break;if (c=='-') {tt=-1;continue;}t=t*10+c-48;}return t*tt;}*/int main(){//freopen("in.txt","r",stdin);//freopen("out.txt","w",stdout);int i,j;scanf("%d %d\n",&n,&k);xgsum=0;dgsum=0;For(i,1,k) {//a[i]=sca();scanf("%d",&a[i]);ins(i);}minn[1]=a[xg[1]];maxx[1]=a[dg[1]];For(i,k+1,n) {//a[i]=sca();scanf("%d",&a[i]);dec(i-k);ins(i);minn[i-k+1]=a[xg[1]];maxx[i-k+1]=a[dg[1]];}For(i,1,n-k) printf("%d ",minn[i]);printf("%d\n",minn[n-k+1]);For(i,1,n-k) printf("%d ",maxx[i]);printf("%d\n",maxx[n-k+1]);return 0;}

1 0
原创粉丝点击