日韩性视频-久久久蜜桃-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)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 91蜜桃臀久久一区二区 | 在线 日本 制服 中文 欧美 | 韩日av在线播放 | 96精品国产| 99视频在线观看视频 | 91视频播放器 | 99久久久无码国产精品性色戒 | 久久一区二区三区四区 | 亚洲熟女乱色综合亚洲av | wwwwxxx日本 | 国产精品久久久久久久 | 国产三级做爰高清在线 | 欧美在线视频免费 | 久久久久久久久久久电影 | 一级免费在线观看 | 日韩精品一区二区三区av | 综合久久精品 | 午夜伦理影院 | 一色桃子juy758在线播放 | 久热这里| 制服丝袜中文字幕在线 | 婷婷丁香综合 | 日韩亚洲欧美在线 | 国产福利精品视频 | 91chinese在线 | 无码免费一区二区三区免费播放 | 五月深爱网 | 麻豆最新| 亚洲男人天堂2024 | 女人18毛片水真多 | 四虎精品| 在线观看羞羞漫画 | 伊人一区二区三区四区 | 韩国色网 | 日韩av网站在线观看 | 久色亚洲 | 美女扒开尿口让男人爽 | 自拍超碰 | 97夜夜操| jjzz黄色片 | 成人精品电影 | 今天高清视频在线观看视频 | 中文精品一区二区三区 | 中文字幕手机在线视频 | 亚洲成年网站 | 久久99久久久久久 | 超碰97自拍| 无套内谢大学处破女www小说 | 亚洲最大福利 | 亚洲一级色| 黄色高清视频 | 日韩欧美一区二区三区在线观看 | 国产女18毛片多18精品 | 经典三级在线视频 | 日韩欧美黄色片 | 四虎网站在线播放 | 亚洲免费国产 | 亚洲中文字幕一区二区 | 2021狠狠干 | 午夜一区在线 | 在线成人亚洲 | av黄色影院 | 久久视频一区 | 欧美激情四区 | 日本黄网站色大片免费观看 | 欧美九九| 极品熟妇大蝴蝶20p 国产偷自拍视频 | 在线视频这里只有精品 | 亚洲视频国产精品 | 91久久中文字幕 | 天天伊人网| 精品亚洲综合 | 国产精品区在线观看 | 亚洲 小说区 图片区 | 国产婷婷一区二区三区久久 | 福利视频h | av在线色| 国产女女做受ⅹxx高潮 | 男女精品视频 | 精品国产99久久久久久宅男i | 久久国产成人精品国产成人亚洲 | 美日韩精品视频 | 欧美人妻精品一区二区 | 不卡二区 | 午夜精品在线观看 | 91青草视频 | 亚洲一区二区网站 | 欧美成人免费一级人片100 | 91sex国产| 一区二区三区偷拍 | 九色国产视频 | 五月在线| 91色拍| 美痴女~美人上司北岛玲 | 精东传媒在线观看 | 国产精品系列在线播放 | 免费人成 | 免费看黄色的视频 | 日韩高清毛片 |