日韩性视频-久久久蜜桃-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-休生伤杜景死惊开 (逆序数变形)【线段树 树状数组】的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 成人在线观看av | 在线观看免费看片 | 日本丰满熟妇videossex一 | 朝桐光av在线一区二区三区 | 精品在线免费视频 | 中文日韩字幕 | 91爱啪 | av污在线观看 | 韩国三级视频在线 | 国产乱国产乱老熟300部视频 | 91精品国产综合久久久蜜臀图片 | 潘金莲一级淫片aaaaaaa | 亚洲av鲁丝一区二区三区 | 国产99久久久欧美黑人 | 91久久久国产精品 | 人与动物2免费观看完整版电影高清 | 免费在线一区二区 | 99热这里只有精 | 国产精品手机在线 | 手机成人在线视频 | 亚洲二区在线 | 经典杯子蛋糕日剧在线观看免费 | 国外成人在线视频 | 色戒av| 亚洲自拍中文字幕 | 国产精品黄色网 | 91蜜桃网站| 国产乱乱 | 1级片在线观看 | 动漫涩涩免费网站在线看 | 日本中文字幕观看 | 国内自拍第三页 | 国产妞干网 | 午夜激情网站 | 亚洲一区二区在线免费观看 | 人人揉人人 | 一二三精品| 国产视频精品免费 | 一本大道伊人av久久综合 | 国产女人精品视频 | 欧美在线激情视频 | 欧美日韩国产免费一区二区三区 | 午夜免费视频网站 | 亚洲欧美日韩中文在线 | 精品123区 | 小妹色播 | 午夜激情视频在线播放 | 精品一区视频 | 亚洲一区不卡在线 | 波多野结衣av在线免费观看 | 探花视频在线版播放免费观看 | 隣の若妻さん波多野结衣 | 免费69视频 | 色婷婷狠 | 国产视频二区 | 色吊丝一区二区 | 美女被草视频在线观看 | 日本嫩草影院 | 亚洲无码精品免费 | 国产视频一区二区三区四区五区 | 一区二区一级片 | 麻豆国产一区二区三区 | 成人在线免费电影 | 精品97人妻无码中文永久在线 | 无码人妻精品一区二区三区蜜桃91 | 国产91网址| 色综合色婷婷 | 国产乱子一区二区 | 在线成人一区二区 | 欧美亚洲国产成人 | 天天干天天天 | 91亚洲国产成人精品一区 | 新婚夫妇白天啪啪自拍 | 亚洲婷婷在线观看 | 婷婷九月丁香 | 免费av的网站 | 日韩成人免费在线 | 老妇女玩小男生毛片 | 性欧美熟妇videofreesex | 国产精品人人人人 | 久久99精品久久久久久水蜜桃 | 在线免费视频你懂的 | 一级黄色片免费播放 | 色丁香久久 | 伊人网在线观看 | 狠狠爱亚洲 | 国产精品第56页 | 女生的胸无遮挡 | 精品国产二区三区 | 亚洲国产精品成人综合色在线婷婷 | 日韩欧美国产另类 | 中文字字幕在线中文乱码电影 | 国产白嫩美女无套久久 | 成 人 a v天堂 | 香蕉视频国产在线观看 | 国产夜色视频 | 日韩av一区在线 | 999久久久| 亚洲精品一区二区18漫画 |