1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
| #include<stdio.h> #include<stdlib.h> void qsort(int *a,int l,int r){ if(l<r){ int i=l,j=r; int pivot=a[l]; while(i<j){ while(a[i]<=pivot && i<r){ i++; } while(a[j]>pivot){ j--; } if(i<j){ int temp=a[i]; a[i]=a[j]; a[j]=temp; } } int temp=a[l]; a[l]=a[j]; a[j]=temp; qsort(a,l,j-1); qsort(a,j+1,r); } } int bsearch(int *a,int l,int r,int x){ if(l<=r){ int mid=(l+r)/2; if(a[mid]==x){ return mid; }else if(a[mid]>x){ return bsearch(a,l,mid-1,x); }else{ return bsearch(a,mid+1,r,x); } } return -1; } int lowerbound(int *a,int l,int r,int x){ if(l<=r){ int mid=(l+r)/2; if(a[mid]>=x){ if(mid==0 || a[mid-1]<x){ return mid; }else{ return lowerbound(a,l,mid-1,x); } }else{ return lowerbound(a,mid+1,r,x); } } return -1; } int main(){ int n; scanf("%d",&n); int *a=(int*)malloc(n*sizeof(int)); for(int i=0;i<n;i++){ scanf("%d",&a[i]); }
qsort(a,0,n-1); for(int i=0;i<n;i++){ printf("%d ",a[i]); }
int x; scanf("%d",&x); printf("%d",bsearch(a,0,n-1,x));
int y; scanf("%d",&y); printf("%d",lowerbound(a,0,n-1,y)); int z; scanf("%d",&z); printf("%d",lowerbound(a,0,n-1,z+1)); free(a); return 0; }
|