#include<vector> #include<cstdio> #include<algorithm> using namespace std; vector<int> a; int n; int len; void in(int n) { if(a.empty()) { a.push_back(n); return; } int en=len-1,beg=0; int mid; while(beg<=en)//用二分搜插入新的數值 時間複雜度logn { mid=(beg+en)/2; if(a[mid]==n) { a.insert(a.begin()+mid,n); return; } if(a[mid]>n) { en=mid-1; } else { beg=mid+1; } } if(a[mid]<n) { a.insert(a.begin()+mid+1,n); return; } else { a.insert(a.begin()+mid,n); return; } } int main() { a.clear(); len=0; while(scanf("%d",&n)!=EOF) { in(n); len++; if(len%2) printf("%d\n",a[len/2]); else printf("%d\n",(a[len/2]+a[len/2-1])/2); //for(int i=0;i<len;i++) printf("%d ",a[i]);printf("\n"); } return 0; }
整體時間複雜度不是應該是nlogn嗎?