日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

hdu1394 Minimum Inversion Number 线段树和树状数组

發(fā)布時間:2025/4/14 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hdu1394 Minimum Inversion Number 线段树和树状数组 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

  題意:

  輸入一個長度 n

  第二行給出長度為n的數(shù)組,數(shù)組的值剛好為0到n-1這n個數(shù)。

? ? ?然后每次把數(shù)組的第一個數(shù)放到最后一個,放n-1次,共有n個排列,這n個排列就有n個逆序數(shù),輸出這n個逆序數(shù)的最小值。

我的做法:

1、每次輸入a[i]后,都把a(bǔ)[i] ++;

2、求出第一個排列的逆序數(shù)

3、遞推求出所有的逆序數(shù)

那怎么求1呢?

對于每一個a[i],求出1到i-1 中比它大的個數(shù),然后相加,即可得。若用樸素的查找,肯定會超時的,所以這里就利用線段樹或者樹狀數(shù)組來快速查找。

線段樹版本:

?

1 #include<cstdio> 2 #include<cstring> 3 #define lson l,m,rt<<1 4 #define rson m+1,r,rt<<1|1 5 const int maxn=5010; 6 int c[maxn<<2]; 7 int a[maxn]; 8 int sum[maxn]; 9 void pushup(int rt) 10 { 11 c[rt]=c[rt<<1]+c[rt<<1|1]; 12 } 13 void update(int p,int add,int l,int r,int rt) 14 { 15 if(l==r){ 16 c[rt]+=add; 17 return; 18 } 19 int m=(l+r)>>1; 20 if(p<=m) 21 update(p,add,lson); 22 else 23 update(p,add,rson); 24 pushup(rt); 25 } 26 int query(int L,int R,int l,int r,int rt) 27 { 28 if(L<=l&&R>=r) 29 return c[rt]; 30 int m=(l+r)>>1; 31 int ret=0; 32 if(L<=m) 33 ret+=query(L,R,lson); 34 if(R>m) 35 ret+=query(L,R,rson); 36 return ret; 37 } 38 int main() 39 { 40 int n; 41 while(scanf("%d",&n)!=EOF){ 42 sum[1]=0; 43 memset(c,0,sizeof(c)); 44 for(int i=1;i<=n;i++){ 45 scanf("%d",&a[i]); 46 a[i]++; 47 sum[1]+=query(a[i],n,1,n,1); 48 update(a[i],1,1,n,1); 49 } 50 for(int i=2;i<=n;i++) 51 sum[i]=sum[i-1]+n+1-2*a[i-1]; 52 int ans=n*n; 53 for(int i=1;i<=n;i++) 54 if(sum[i]<ans) 55 ans=sum[i]; 56 printf("%d\n",ans); 57 } 58 return 0; 59 } View Code

?

用了46ms

?

?

樹狀數(shù)組版本:

1 #include<cstdio> 2 #include<cstring> 3 const int maxn=5010; 4 int c[maxn]; 5 int a[maxn]; 6 int sum[maxn]; 7 int lowbit(int x) 8 { 9 return x&(-x); 10 } 11 void update(int x,int d,int n) 12 { 13 while(x<=n){ 14 c[x]+=d; 15 x+=lowbit(x); 16 } 17 } 18 int query(int x) 19 { 20 int ret=0; 21 while(x>0){ 22 ret+=c[x]; 23 x-=lowbit(x); 24 } 25 return ret; 26 } 27 int main() 28 { 29 int n; 30 while(scanf("%d",&n)!=EOF){ 31 memset(c,0,sizeof(c)); 32 sum[1]=0; 33 for(int i=1;i<=n;i++){ 34 scanf("%d",&a[i]); 35 a[i]++; 36 sum[1]+=(i-1-query(a[i])); 37 update(a[i],1,n); 38 } 39 for(int i=2;i<=n;i++) 40 sum[i]=sum[i-1]+n+1-2*a[i-1]; 41 int ans=n*n; 42 for(int i=1;i<=n;i++) 43 if(ans>sum[i]) 44 ans=sum[i]; 45 printf("%d\n",ans); 46 } 47 return 0; 48 } View Code

也是46ms

?

轉(zhuǎn)載于:https://www.cnblogs.com/-maybe/p/4355340.html

總結(jié)

以上是生活随笔為你收集整理的hdu1394 Minimum Inversion Number 线段树和树状数组的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 婷婷深爱网 | 成人av免费网站 | 老色批永久免费网站www | 亚洲图片一区二区 | 浮力影院草草 | 日韩免费高清视频 | 中文天堂在线资源 | 国产丝袜一区二区 | 日韩精品免费一区二区三区 | 日韩精品中文字幕一区二区三区 | 国产精品美女久久久久久久久 | 一区二区三区精品视频在线观看 | 日韩久久综合 | 免费在线日本 | 日韩av影音先锋 | 伊人网视频在线 | 蜜乳av一区 | 天天爱天天做天天爽 | 国产情侣啪啪 | 99久热在线精品996热是什么 | 四虎影院在线免费播放 | 国产老熟女一区二区三区 | av电影免费在线播放 | 激情综合图 | 性做久久久久久免费观看 | 欧美成人精品三级网站 | 亚洲国产日韩精品 | 51成人做爰www免费看网站 | 韩国伦理电影免费在线 | 亚洲人精品午夜射精日韩 | 欧美日本色 | 久久裸体视频 | 超碰在线免费公开 | 99久久久无码国产精品性 | 亚洲一区二区三区四区在线 | 小视频免费在线观看 | 亚洲操图 | 亚洲精品一区二区口爆 | 性涩av| 精品乱码一区二区三四区视频 | 黄色精品视频在线观看 | 久国产 | 中文字幕在线播放视频 | 中文字幕一区二区在线老色批影视 | 操bbbbb| 在线观看三级网站 | 国产精品美女高潮无套 | 捆绑凌虐一区二区三区 | 免费看黄色的网站 | 深夜成人在线 | 国产成人精品久久二区二区91 | 国产自偷自拍视频 | 久久机热| 激情五月婷婷小说 | 国产午夜无码精品免费看奶水 | 欧美午夜一区 | 色婷婷电影网 | 国产精品二区视频 | 国产精品一区二区三区免费视频 | 最新高清无码专区 | 日本天堂在线播放 | 大尺度床戏揉捏胸视频 | 欧美精品欧美精品系列 | 欧美黑人性xxx | sm在线观看| 亚洲精品在线视频免费观看 | 草草国产 | 午夜九九 | 青青草国内自拍 | 成人免费毛片嘿嘿连载 | 欧美日韩精品在线观看视频 | 久久性生活 | 久久国产亚洲精品无码 | 欧美极品第一页 | 中文字幕精品一区二区精品 | 男生c女生| 桃色网站在线观看 | 欧州一区二区 | 黄色一级片av| 亚洲综合色站 | 精品处破女学生 | 亚洲精品成a人在线观看 | 久久久久婷 | 成人免费xxxxxx视频 | 日韩av中文字幕在线播放 | 日本a区 | 免费看成人 | 性的免费视频 | av免播放器在线观看 | 免费网站在线观看黄色 | 波多野结衣免费观看视频 | 精品福利在线视频 | 国模少妇一区二区三区 | 好男人香蕉影院 | 岛国精品在线播放 | 免费播放毛片 | 玖玖爱免费视频 | 国产精品黄色大片 | 色狠狠一区二区三区香蕉 |