<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      原題鏈接洛谷提高組-火柴排隊(duì)

      分析

      這題我是用離散化,數(shù)組映射(數(shù)據(jù)處理辦法),歸并排序優(yōu)化逆序?qū)?寫的。
      關(guān)于(ai-bi)的平方 求和可以理解為 a組火柴和b組火柴 相對(duì)位置相等時(shí) 這個(gè)和最小
      竟然有相對(duì)位置了就逃不了離散化數(shù)組了
      對(duì)于求相鄰交換次數(shù),是不是很像冒泡排序。這時(shí)候就要引入逆序?qū)α恕?br> image
      可是這個(gè)逆序?qū)Φ膮⒄帐?,2,3,4,5的升序來判斷的,我們a轉(zhuǎn)成b的相對(duì)位置可不是
      1,2,3,4,5來排的所以我們把b數(shù)組映射成1,2,3,4,5,然后把a(bǔ)數(shù)組也按照相同的映射方法改寫一下,再用逆序?qū)憽#ú挥锰谝庵貜?fù)的數(shù)據(jù),因?yàn)閮H大于才交換)
      逆序?qū)τ贸R?guī)的暴力方法 時(shí)間雜復(fù)度過大,所以這里我用了歸并排序來優(yōu)化

      總結(jié)

      1,數(shù)據(jù)離散化
      2,數(shù)組映射
      3,逆序?qū)?/p>

      代碼

      點(diǎn)擊查看代碼
      #include<bits/stdc++.h>
      using namespace std;
      typedef long long ll;
      const int N=100009;
      struct data//結(jié)構(gòu)體離散化
      {
          ll val;
          ll id;
      }olda[N],oldb[N];
      ll newa[N],copyy[N],a[N],b[N];
      //為了好理解數(shù)組開的有點(diǎn)多,寫的時(shí)候可以省一些
      bool cmp(struct data x,struct data y)
      {
          return x.val<y.val;
      }
      ll cnt=0,cup[N];
      void merge(ll left,ll right)
      {
         if(left>=right)
         {
             return;
         }
          ll mid=(left+right)/2;
          merge(left,mid);
          merge(mid+1,right);
          ll i=left,j=mid+1,k=left;
          while(i<=mid && j<=right)
          {
              if(newa[i]<=newa[j])
              {
                  cup[k++]=newa[i++];
              }else
              {
                  cup[k++]=newa[j++];
                  cnt+=mid-i+1;//與歸并排序相比就加了這兩條
                  cnt=cnt%99999997;
              }
          }
          while(i<=mid)
          {
              cup[k++]=newa[i++];
          }
          while(j<=right)
          {
              cup[k++]=newa[j++];
          }
          for (int v=left;v<=right;v++)
          {
              newa[v]=cup[v];
          }
      }
      
      int main()
      {
      int n;
          scanf("%lld",&n);
          for(int i=1;i<=n;i++)
          {
              scanf("%lld",&olda[i].val);
              olda[i].id=i;
          }
          for(int i=1;i<=n;i++)
          {
              scanf("%lld",&oldb[i].val);
              oldb[i].id=i;
          }
          sort(olda+1,olda+1+n,cmp);
          sort(oldb+1,oldb+1+n,cmp);
          for(ll i=1;i<=n;i++)
          {
              a[olda[i].id]=i;
              //不用特判相同時(shí)id相等,后面逆序?qū)Φ奶幚矸较蚩梢员苊庀嗟葧r(shí)相交換
              //直接先出現(xiàn)的小
          }
          for(ll i=1;i<=n;i++)
          {
              b[oldb[i].id]=i;
          }
          //假設(shè)以b為參照物
          //求逆序?qū)r(shí)暴力會(huì)超時(shí)所以可以進(jìn)行優(yōu)化,我用歸并優(yōu)化
          //將第2盒火柴映射為升序,相當(dāng)于把第二盒當(dāng)成id為1,2,3,4,5然后把第一盒按id去改
          for(ll i = 1; i <= n; i ++)  copyy[b[i]] = i;//copyy作為按b轉(zhuǎn)化的表,想出這個(gè)方法的人真是天才!!
          //將第1盒火柴當(dāng)對(duì)應(yīng)的元素進(jìn)行映射為第一種表示
          for(ll i = 1; i <= n; i ++) newa[i] = copyy[a[i]];
          merge(1,n);
          printf("%lld\n",cnt%99999997);
          return 0;
      }
      
      posted on 2024-12-29 22:01  不太會(huì)a  閱讀(22)  評(píng)論(0)    收藏  舉報(bào)



      主站蜘蛛池模板: 国产精品+日韩精品+在线播放| 亚洲一区二区国产av| 国产一区二区三区色视频| 美女黄网站18禁免费看| 丰满少妇被猛烈进出69影院| 日韩深夜福利视频在线观看| 国产一级r片内射免费视频| 人妻教师痴汉电车波多野结衣| 久久99国产精品尤物| 国产精品自在自线视频| h无码精品动漫在线观看| 亚洲一区在线观看青青蜜臀| 亚洲午夜无码av毛片久久| 亚洲国产欧美在线人成| 午夜天堂一区人妻| 线观看的国产成人av天堂| 在线视频中文字幕二区| 麻豆成人精品国产免费| 蜜桃av亚洲精品一区二区| 国产日韩精品欧美一区灰| 亚洲欧美日韩综合久久| 男女啪祼交视频| 国产色无码专区在线观看 | 日韩深夜福利视频在线观看| 丰满大爆乳波霸奶| 久久九九99这里有视频| 亚洲最大国产成人综合网站| 久久精品免视看国产成人| 国产成人午夜福利在线播放| 人妻少妇精品视频三区二区| xxxx丰满少妇高潮| 久久人人97超碰精品| 亚洲中文字幕一区二区| 污网站在线观看视频| 亚洲人成人伊人成综合网无码| 芒康县| 国产精品中文字幕一区| 久久一日本综合色鬼综合色| 97免费在线观看视频| 亚洲国产亚洲综合在线尤物| 人妻熟女一区二区aⅴ向井蓝|