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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

cdoj841-休生伤杜景死惊开 (逆序数变形)【线段树 树状数组】

發布時間:2025/4/16 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 cdoj841-休生伤杜景死惊开 (逆序数变形)【线段树 树状数组】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

http://acm.uestc.edu.cn/#/problem/show/841

休生傷杜景死驚開

Time Limit: 3000/1000MS (Java/Others) ??? Memory Limit: 65535/65535KB (Java/Others)
Submit?Status

陸伯言軍陷八卦陣之中,分明只是一條直路,卻怎的也走不到盡頭。陣中盡是石堆,以某一石堆為參考,無論向走還是向右,總是會回到出發的石堆,最后幸得一黃姓老翁帶路才得脫出。

陸伯言逃離八卦陣后,來到山頂觀察此陣,記從左往右第i堆石堆的高度為Ai,發現任何兩堆較矮的石堆都能和它們之間的一座較高的石堆形成"八卦鎖",將其中之人牢牢鎖住,無從逃脫。

根據石堆的情況,陸伯言大致計算了“八卦鎖”的數量(即 Ai<Aj>Ak,i<j<k 的組合數),不禁心中一驚,對孔明驚為天人,遂放棄追擊,收兵回吳。

“有勞岳父了。” “為何將其放走?” “...一表人才,何必浪費于此。”

Input

第一行一個整數n,表示石堆堆數。

接下來一行,n個整數,第i個數表示從左到右第i堆石堆的高度Ai。

1≤n≤50000,1≤Ai≤32768

Output

一個整數,“八陣鎖”的數目。

Sample input and output

Sample InputSample Output
5 1 2 3 4 1 6

?

?

?

?

題意:求Ai<Aj>Ak,i<j<k 的組合數。

思路:這道題目其實是求逆序數,稍作變形,可以采用線段樹或者樹狀數組來實現。兩次掃描,先從前往后掃,即插即查,每插入一次,便計算該位置之前的總數并記錄,再從后往前掃,原理相同。最后求對應位置乘積和。詳情見代碼:

線段樹實現:

1 #include <fstream> 2 #include <iostream> 3 #include <cstdio> 4 #include <cstring> 5 6 using namespace std; 7 8 const int N=50002; 9 int n,m,maxn,a[N],l[N]; 10 struct node 11 { 12 int left,right; 13 int sum_; 14 }tree[4*32770]; 15 16 void build(int id,int l,int r);//建一棵線段樹 17 int query_sum(int id,int l,int r);//查詢區間和 18 void update(int id,int pos);//更新位置pos的值增加1 19 20 int main() 21 { 22 //freopen("D:\\input.in","r",stdin); 23 //freopen("D:\\output.out","w",stdout); 24 long long ans=0; 25 scanf("%d",&n); 26 for(int i=1;i<=n;i++) 27 scanf("%d",&a[i]),maxn=max(a[i],maxn); 28 build(1,1,maxn); 29 for(int i=1;i<=n;i++) 30 { 31 update(1,a[i]); 32 l[i]=query_sum(1,1,a[i]-1); 33 } 34 build(1,1,maxn); 35 for(int i=n;i>=1;i--) 36 { 37 update(1,a[i]); 38 ans+=l[i]*query_sum(1,1,a[i]-1); 39 } 40 printf("%lld\n",ans); 41 return 0; 42 } 43 void build(int id,int l,int r) 44 { 45 tree[id].left=l; 46 tree[id].right=r; 47 if(l==r) 48 { 49 tree[id].sum_=0; 50 } 51 else 52 { 53 int mid=(l+r)/2; 54 build(2*id,l,mid); 55 build(2*id+1,mid+1,r); 56 tree[id].sum_=tree[2*id].sum_+tree[2*id+1].sum_; 57 } 58 } 59 int query_sum(int id,int l,int r) 60 { 61 if(l>r) return 0;//注意參數的大小關系限制 62 if(tree[id].left==l&&tree[id].right==r) 63 return tree[id].sum_; 64 else 65 { 66 int mid=(tree[id].left+tree[id].right)/2; 67 if(r<=mid) return query_sum(2*id,l,r); 68 else if(l>mid) return query_sum(2*id+1,l,r); 69 else 70 return query_sum(2*id,l,mid)+query_sum(2*id+1,mid+1,r); 71 } 72 } 73 void update(int id,int pos) 74 { 75 if(tree[id].left==tree[id].right) 76 { 77 tree[id].sum_++; 78 } 79 else 80 { 81 int mid=(tree[id].left+tree[id].right)/2; 82 if(pos<=mid) update(2*id,pos); 83 else update(2*id+1,pos); 84 tree[id].sum_=tree[2*id].sum_+tree[2*id+1].sum_; 85 } 86 } View Code

樹狀數組實現:

1 #include <fstream> 2 #include <iostream> 3 #include <cstdio> 4 #include <cstring> 5 6 using namespace std; 7 8 int n,m,maxn; 9 int a[50002],tree[32770],l[50002]; 10 11 int read(int pos);//求 sum[1,pos]的答案 12 void update(int pos);//把a[pos]加上1 13 14 int main() 15 { 16 //freopen("D:\\input.in","r",stdin); 17 //freopen("D:\\output.out","w",stdout); 18 long long ans=0; 19 scanf("%d",&n); 20 for(int i=1;i<=n;i++) 21 scanf("%d",&a[i]),maxn=max(a[i],maxn); 22 for(int i=1;i<=n;i++) 23 { 24 update(a[i]); 25 l[i]=read(a[i]-1); 26 } 27 memset(tree,0,sizeof(tree)); 28 for(int i=n;i>=1;i--) 29 { 30 update(a[i]); 31 ans+=l[i]*read(a[i]-1); 32 } 33 printf("%lld\n",ans); 34 return 0; 35 } 36 int read(int pos) 37 { 38 int ans=0; 39 while(pos>0) 40 { 41 ans+=tree[pos]; 42 pos-=pos&(-pos); 43 } 44 return ans; 45 } 46 void update(int pos) 47 { 48 while(pos<=maxn) 49 { 50 tree[pos]++; 51 pos+=pos&(-pos); 52 } 53 } View Code

轉載于:https://www.cnblogs.com/jiu0821/p/4231391.html

總結

以上是生活随笔為你收集整理的cdoj841-休生伤杜景死惊开 (逆序数变形)【线段树 树状数组】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 91成人精品视频 | 国产人妖一区二区三区 | 国产免费黄色网址 | 性欧美lx╳lx╳ | 亚洲一区二区三区无码久久 | 人人97| 成人在线网址 | 欧美日韩成人免费观看 | 人人妻人人澡人人爽欧美一区 | 美色视频| 精品1区2区 | 亚洲欧洲成人在线 | 色玖玖 | 欧美性精品 | 精品乱码一区二区三区四区 | 刘亦菲国产毛片bd | 成人av日韩| 久草资源在线 | 男女偷爱性视频刺激 | 91亚洲视频在线 | 成人啪啪18免费游戏链接 | 男人在线网站 | 国产熟妇另类久久久久 | 色呦呦日韩精品 | 亚洲激情三区 | 夜夜草av| 激情午夜天 | 熟妇人妻va精品中文字幕 | 好吊妞视频在线 | 高潮一区| 国产麻豆精品在线观看 | 欧美性猛交xxxx乱大交退制版 | 亚洲一区二区乱码 | 成人一二三 | 性色在线 | 777理伦三级做爰 | 高跟91娇喘 | 理论片91 | 黄色操人视频 | 福利在线视频导航 | zzjizzji亚洲日本少妇 | 日韩一区二区影视 | 午夜视频一区 | 91久久精品日日躁夜夜躁国产 | 国产视频污 | 国产六区 | 久久爱伊人 | 婷婷伊人久久 | 美景之屋电影免费高清完整韩剧 | 98av视频 | 亚洲色图 校园春色 | 国产老熟女一区二区三区 | 婷婷av在线 | 日韩wwww| 婷婷丁香六月 | 欧美久久久久久又粗又大 | 光棍天堂av | 1000部国产精品成人观看 | 欧美在线一级视频 | 亚洲成人毛片 | h网址在线观看 | 欧美人与禽猛交乱配 | 色峰视频| 色屋在线 | 日韩草逼视频 | 黄色香港三级三级三级 | 国产高潮视频 | 国产蜜臀在线 | 亚洲精品字幕在线观看 | a猛片| 在线免费观看亚洲 | 成人午夜电影网站 | 毛片在线免费 | 可以看黄色的网站 | 中文日韩 | 四虎在线免费播放 | 黄色片久久久 | 国产自产 | 亚洲精品视频久久久 | 欧美三级免费观看 | 狠狠ri | 97干视频 | 美女扒开内看个够网站 | 岛国免费视频 | 成人av网站在线 | 男人和女人搞鸡 | ,午夜性刺激免费看视频 | 欧美一区二区三区视频在线观看 | 久久99婷婷 | 亚洲一区二区色图 | 男女乱淫视频 | 九色网址| 精品视频一区二区在线 | 肉肉av福利一精品导航 | 水多多在线 | 青草综合| 欧美日韩精选 | 91色在线观看 | 一级视频在线观看 |