• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            C小加

            厚德 博學 求真 至善 The bright moon and breeze
            posts - 145, comments - 195, trackbacks - 0, articles - 0
              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

            Ural 1090. In the Army Now 解題報告

            Posted on 2012-01-16 15:12 C小加 閱讀(1312) 評論(0)  編輯 收藏 引用 所屬分類: 解題報告
            利用歸并排序求逆序對數,只需要在裸體的歸并排序的適當地方加上cnt=n1-i就OK了。很好理解的。

            #include<cstdio>
            #include<iostream>
            using namespace std;
            const int MAXM=10003;
            const int INF=0x7fffffff-1;
            int cnt;
            // 歸并排序中的合并算法
             void Merge(int array[], int start, int mid, int end)
              {
                 int temp1[MAXM/2+1], temp2[MAXM/2+1];
                 int n1, n2;
                 n1 = mid - start + 1;
                 n2 = end - mid;

                 // 拷貝前半部分數組
                 for (int i = 0; i < n1; i++)
                  {
                     temp1[i] = array[start + i];
                 }
                 // 拷貝后半部分數組
                 for (int i = 0; i < n2; i++)
                  {
                     temp2[i] = array[mid + i + 1];
                 }
                 // 把后面的元素設置的很大
                 temp1[n1] = temp2[n2] = INF;
                 // 逐個掃描兩部分數組然后放到相應的位置去
                 for (int k = start, i = 0, j = 0; k <= end; k++)
                  {
                     if (temp1[i] <= temp2[j])
                      {
                         array[k] = temp1[i];
                         i++;
                     }
                     else
                      {
                          cnt+=n1-i;//逆序對的個數
                         array[k] = temp2[j];
                         j++;
                     }
                 }
             }

             // 歸并排序
             void MergeSort(int array[], int start, int end)
              {
                 if (start < end)
                  {
                     int i;
                     i = (end + start) / 2;
                     // 對前半部分進行排序
                     MergeSort(array, start, i);
                     // 對后半部分進行排序
                     MergeSort(array, i + 1, end);
                     // 合并前后兩部分
                     Merge(array, start, i, end);
                 }
             }

             int main()
             {
                 int n,k;
                 int arr[MAXM];
                 int largemerge=0;
                 int num;
                 scanf("%d %d",&n,&k);
                 for(int j=1;j<=k;j++)
                 {
                     cnt=0;
                    for(int i=0;i<n;i++)
                    {
                        scanf("%d",arr+i);
                    }
                    MergeSort(arr,0,n-1);
                    if(cnt>largemerge)
                    {
                        largemerge=cnt;
                        num=j;
                    }
                 }
                 printf("%d\n",num);
             }
            伊人久久大香线蕉av不卡| 亚洲色欲久久久久综合网| 亚洲av日韩精品久久久久久a| 狠狠色婷婷久久一区二区 | 国产亚洲成人久久| 中文字幕无码av激情不卡久久| 精品久久久久久久久午夜福利 | 色综合久久88色综合天天 | 亚洲午夜久久久久久噜噜噜| 国产精品成人99久久久久91gav | 一本一本久久a久久综合精品蜜桃| 久久精品国产网红主播| 久久久WWW成人免费毛片| 久久99久久99精品免视看动漫| 久久久黄片| 亚洲国产精品久久久久婷婷老年| 狠狠色婷婷久久一区二区| 93精91精品国产综合久久香蕉 | 久久不射电影网| 久久人人爽人人爽人人AV东京热 | 久久精品国产99国产精品导航| 成人国内精品久久久久影院| 亚洲精品乱码久久久久久自慰| 99久久精品无码一区二区毛片| 久久久无码精品亚洲日韩蜜臀浪潮 | 久久精品国产99久久久古代| 久久国产精品免费| 色噜噜狠狠先锋影音久久| 国产精品无码久久综合| 久久久久久久波多野结衣高潮 | 青青草原综合久久大伊人导航| 99久久免费只有精品国产| 国产精品久久久久9999高清| 99久久超碰中文字幕伊人| 久久久亚洲欧洲日产国码二区| 亚洲AV无码久久寂寞少妇| 亚洲国产精品无码久久久不卡| 久久精品国产99久久无毒不卡| 久久狠狠高潮亚洲精品| 久久国产免费观看精品| 国产午夜精品久久久久九九电影 |