poj 2299 Ultra-QuickSort

<textarea cols="62" rows="15" name="code" class="cpp">////poj 2299 Ultra-QuickSort 归并排序 /* 题解:逆序数,仅此而已。。 PS: 水题,还是写了半个小时。 */ #include &lt;iostream&gt; #include &lt;algorithm&gt; using namespace std; const int inf = 1&lt;&lt;28; int n,m; int a[500010],temp[500010],ans; void Merge_Sort(int a[],int l,int r) { if (l&gt;=r) return ; int mid = (l+r)&gt;&gt;1; Merge_Sort(a,l,mid); Merge_Sort(a,mid+1,r); int i,j,k; for (k=l,i=l,j=mid+1;i&lt;=mid &amp;&amp; j&lt;=r;k++) { if (a[i]&lt;=a[j]) temp[k]=a[i++]; else { ans+=mid-i+1; temp[k]=a[j++]; } } while (i&lt;=mid) temp[k++]=a[i++]; while (j&lt;=r) temp[k++]=a[j++]; for (i=l;i&lt;=r;i++) a[i]=temp[i]; } int main() { while (scanf("%d",&amp;n) &amp;&amp; n) { for (int i=0;i&lt;n;i++) scanf("%d",&amp;a[i]); ans=0; Merge_Sort(a,0,n-1); printf("%d/n",ans); } system("pause"); return 0; } </textarea>

你可能感兴趣的:(poj 2299 Ultra-QuickSort)