poj 3579 二分加尺取法

来源:互联网 发布:淘宝现货怎么抢最快 编辑:程序博客网 时间:2024/06/10 01:12
#include<stdio.h>#define N 100000+16int d[N];int n;void qsort(int a[],int l,int r)//快速排序{int i,j,x;if(l<r){i=l;j=r;x=a[i];while(i<j){while(i<j&&a[j]>x)j--;if(i<j)a[i++]=a[j];while(i<j&&a[i]<=x)i++;if(i<j)a[j--]=a[i];}a[i]=x;qsort(a,l,i-1);qsort(a,i+1,r);}}int main(void){int s,l,r,m,i,j,ans;    while(~scanf("%d",&n)){s=(n-1)*n/4;if(((n-1)*n/2)&1)s++;for(i=1;i<=n;i++)scanf("%d",&d[i]);qsort(d,1,n);    l=0;r=d[n]-d[1];while(l<r){ans=0;m=(l+r)/2;j=1;for(i=2;i<=n;i++)//尺取法{while(d[i]-d[j]>m)j++;ans+=(i-j);}if(ans<s)l=m+1;elser=m;}printf("%d\n",l);}}


0 0