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

歡迎訪問(wèn) 生活随笔!

生活随笔

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

编程问答

4923: [Lydsy1706月赛]K小值查询 平衡树 非旋转Treap

發(fā)布時(shí)間:2025/7/14 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 4923: [Lydsy1706月赛]K小值查询 平衡树 非旋转Treap 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

國(guó)際慣例的題面:

這種維護(hù)排序序列,嚴(yán)格大于的進(jìn)行操作的題都很套路......
我們按照[0,k],(k,2k],(2k,inf)分類(lèi)討論一下就好。
顯然第一個(gè)區(qū)間的不會(huì)變化,第二個(gè)區(qū)間的會(huì)被平移進(jìn)第一個(gè)區(qū)間,第三個(gè)區(qū)間的相對(duì)大小不會(huì)變化。
于是我們直接把第二個(gè)區(qū)間拆了重構(gòu),一個(gè)一個(gè)插入第一個(gè)區(qū)間即可。因?yàn)槊看芜@樣做最少減半,所以每個(gè)元素只會(huì)被重構(gòu)log次,復(fù)雜度nlog^2n。
這種按照值域分離區(qū)間的操作,非旋轉(zhuǎn)treap實(shí)現(xiàn)起來(lái)是最簡(jiǎn)單的......
然而第一次寫(xiě)非旋轉(zhuǎn)treap還是出了一點(diǎn)問(wèn)題,注意它的插入是通過(guò)按照值域分裂,新建點(diǎn),再進(jìn)行兩次合并實(shí)現(xiàn)的。直接插入復(fù)雜度不對(duì)。
另外區(qū)間值域存在重合的情況兩個(gè)treap不能直接合并......
我寫(xiě)的判定size的版本復(fù)雜度好像不對(duì)(不如暴力快?),于是只好預(yù)先生成fix值。

代碼:

1 #include<cstdio> 2 #include<algorithm> 3 #include<cstdlib> 4 const int maxn=1e5+1e2; 5 6 typedef std::pair<int,int> pii; 7 __inline pii mp(const int &x,const int &y) { return std::make_pair(x,y); } 8 9 int seq[maxn],sql; 10 int stk[maxn],top; 11 12 struct Treap { 13 int lson[maxn],rson[maxn],lazy[maxn],val[maxn],siz[maxn],fix[maxn],cnt; 14 15 inline void init(int n) { 16 for(int i=1;i<=n;i++) fix[i] = i; 17 std::random_shuffle(fix+1,fix+1+n); 18 } 19 inline void apply(int pos,int x) { 20 if(pos) lazy[pos] += x , val[pos] -= x; 21 } 22 inline void push(int pos) { 23 if( lazy[pos] ) apply(lson[pos],lazy[pos]) , apply(rson[pos],lazy[pos]) , lazy[pos] = 0; 24 } 25 inline void maintain(int pos) { 26 siz[pos] = siz[lson[pos]] + siz[rson[pos]] + 1; 27 } 28 29 inline pii split(int pos,int dv) { // left is <= , right is > . 30 if( !pos ) return mp(0,0); 31 push(pos); 32 if( dv < val[pos] ) { 33 pii spl = split(lson[pos],dv); 34 lson[pos] = spl.second , maintain(pos); 35 return mp(spl.first,pos); 36 } else { 37 pii spr = split(rson[pos],dv); 38 rson[pos] = spr.first , maintain(pos); 39 return mp(pos,spr.second); 40 } 41 } 42 inline int merge(int x,int y) { 43 if( !x || !y ) return x | y; 44 push(x) , push(y); 45 if( val[x] > val[y] ) std::swap(x,y); 46 if( fix[x] > fix[y] ) { // siz[x] is bigger . 47 lson[y] = merge(lson[y],x) , maintain(y); 48 return y; 49 } else { 50 rson[x] = merge(rson[x],y) , maintain(x); 51 return x; 52 } 53 } 54 inline void dfs(int pos) { 55 if( !pos ) return; 56 seq[++sql] = val[pos] , push(pos); 57 dfs(lson[pos]) , dfs(rson[pos]); 58 lson[pos] = rson[pos] = siz[pos] = 0 , stk[++top] = pos; 59 } 60 inline int kth(int pos,int k) { // return the kth value . 61 if( k == siz[lson[pos]] + 1 ) return val[pos]; 62 return push(pos) , k <= siz[lson[pos]] ? kth(lson[pos],k) : kth(rson[pos],k-siz[lson[pos]]-1); 63 } 64 inline void insert(int &root,int x) { 65 val[++cnt] = x , siz[cnt] = 1; 66 pii sp = split(root,x); 67 root = merge(sp.first,cnt) , root = merge(root,sp.second); 68 } 69 inline void reinsert(int &root,int x) { 70 int cur = stk[top--]; 71 val[cur] = x , siz[cur] = 1; 72 pii sp = split(root,x); 73 root = merge(sp.first,cur) , root = merge(root,sp.second); 74 } 75 76 }tp; 77 78 int main() { 79 static int n,m,root,rtl,rtm,rtr; 80 scanf("%d%d",&n,&m) , tp.init(n); 81 for(int i=1,t;i<=n;i++) scanf("%d",&t) , tp.insert(root,t); 82 for(int i=1,o,x;i<=m;i++) { 83 scanf("%d%d",&o,&x); 84 if( o == 1 ) printf("%d\n",tp.kth(root,x)); 85 else if( o == 2 ) { 86 pii sp = tp.split(root,x); 87 rtl = sp.first , sp = tp.split(sp.second,x<<1); 88 rtm = sp.first , rtr = sp.second; 89 sql = 0 , tp.dfs(rtm) , tp.apply(rtr,x); 90 for(int i=1;i<=sql;i++) tp.reinsert(rtl,seq[i]-x); 91 root = tp.merge(rtl,rtr); 92 } 93 } 94 return 0; 95 } View Code



Thupc被拒了好氣啊!我們隊(duì)可是有yzy大爺?shù)?#xff01;(即使這樣都被拒了,一看就是我太菜了)

ありのままでいればいつも
只要堅(jiān)守自我維持現(xiàn)狀
あるべき私かここにいると
自己希望成為的樣貌就存在于此
信じてまた 新しい夢(mèng)を
不要放棄希望 嶄新的夢(mèng)想
精一杯描き出せばいい
再次奮力地去描繪就好
そう気づき始めたよ私
是啊 而我開(kāi)始意識(shí)到
みんなとただ笑ってる未來(lái)を
大家單純地綻放笑容的未來(lái)
夢(mèng)見(jiàn)て
誠(chéng)心盼望

轉(zhuǎn)載于:https://www.cnblogs.com/Cmd2001/p/8996861.html

總結(jié)

以上是生活随笔為你收集整理的4923: [Lydsy1706月赛]K小值查询 平衡树 非旋转Treap的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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

主站蜘蛛池模板: 男人影院在线观看 | 日韩精品2区| 自拍偷拍激情 | 91碰碰| 激情内射亚洲一区二区三区爱妻 | 欧美午夜精品久久久 | 国产高清小视频 | 国产乱妇4p交换乱免费视频 | 日韩一级色片 | 美女诱惑一区二区 | 精品在线免费视频 | 91在线视频国产 | 草草影院国产 | 亚洲国产精品无码专区 | 国产亚洲色婷婷久久 | 国产一区亚洲二区三区 | 一极毛片 | 一区二区中文在线 | 日韩在线高清 | 91av在| 丁香伊人 | 老王66福利网 | 欧洲av一区二区三区 | 无码一区二区三区 | 777亚洲 | 男生看的污网站 | 中文字幕在线视频一区二区三区 | 综合视频一区二区 | 日本色悠悠 | 朝鲜一级黄色片 | 黄av在线播放 | 午夜剧场福利 | 亚洲Av无码成人精品区伊人 | 国产一区二区av在线 | 成人网在线免费观看 | 欧美精品播放 | 国产精品传媒 | 国产 日韩 欧美 综合 | 国产精品99久久久久 | 狠狠躁天天躁夜夜躁婷婷 | 伊人久久狼人 | 日本高清视频免费观看 | 亚洲不卡av一区二区 | av导航站 | 黄a毛片| 成人欧美精品一区二区 | 欧美成年视频 | av色先锋| 精品黑人一区二区三区 | 欧美 亚洲 一区 | 一本大道熟女人妻中文字幕在线 | 国产系列精品av | 久草网视频 | 国产v片在线观看 | 色伊人网 | 伊人免费在线观看高清版 | 偷拍一区二区三区 | 在线观看av一区 | 青青久操 | 91综合精品 | wwwwww在线观看 | 午夜精品久久久久久久蜜桃 | 欧美寡妇性猛交ⅹxxx | 一区二区片| 久久久久久久久久久久国产精品 | 久久禁| 香蕉a | 一级国产视频 | 二级黄色大片 | 在线免费亚洲 | 中文字幕在线看片 | 日韩av影片在线观看 | heyzo国产 | 鸭子av | 国产va在线观看 | 在线观看一二三区 | 四虎国产成人精品免费一女五男 | 91麻豆精品国产91久久久久久 | 爱爱爱爱网 | 大地资源中文在线观看免费版 | 亚洲欧美日韩综合 | 网址你懂的在线 | 欧美大色一区 | 亚洲综合国产精品 | 熟女一区二区三区视频 | 亚洲暴爽 | 欧美日韩视频一区二区 | www国产一区| 欧洲一区二区三区四区 | 成人性生交大片免费看中文 | 欧美精品久久96人妻无码 | 日韩免费av一区 | av三级网| 草草浮力影院 | 被绑在床强摁做开腿呻吟 | 成人毛片18女人毛片 | 天天躁日日躁aaaaxxxx | 91视频在线观看网站 | a级一级片 |