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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

BZOJ 1503 treap

發布時間:2025/4/9 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 BZOJ 1503 treap 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

思路:
treap (算是基本操作吧…..)
加減的操作數很少 就暴力好啦
每回判斷一下最小的數是不是比M小
如果是 就刪,繼續判斷

搞定。

//By SiriusRen #include <cstdio> #include <cstring> #include <algorithm> using namespace std; int n,M,xx,size,root,jy,ans; char op[3]; struct Treap{int ch[2],rnd,cnt,sz,v;}tr[300050]; void Upd(int k){tr[k].sz=tr[tr[k].ch[0]].sz+tr[tr[k].ch[1]].sz+tr[k].cnt;} void rot(int &k,bool f){int t=tr[k].ch[f];tr[k].ch[f]=tr[t].ch[!f],tr[t].ch[!f]=k,Upd(k),Upd(t),k=t;} void insert(int &k,int num){if(!k){k=++size;tr[k].sz=tr[k].cnt=1,tr[k].v=num,tr[k].rnd=rand();return;}tr[k].sz++;if(tr[k].v==num){tr[k].cnt++;return;}bool f=num>tr[k].v;insert(tr[k].ch[f],num);if(tr[tr[k].ch[f]].rnd<tr[k].rnd)rot(k,f); } void dfs(int k,int num){tr[k].v+=num;if(tr[k].ch[0])dfs(tr[k].ch[0],num);if(tr[k].ch[1])dfs(tr[k].ch[1],num); } int rank(int k,int num){if(tr[tr[k].ch[1]].sz>=num)return rank(tr[k].ch[1],num); else if(tr[tr[k].ch[1]].sz+tr[k].cnt>=num)return tr[k].v;else return rank(tr[k].ch[0],num-tr[tr[k].ch[1]].sz-tr[k].cnt); } int get_min(int k){if(tr[k].ch[0])return get_min(tr[k].ch[0]);return tr[k].v; } void del(int &k,int num){if(tr[k].v==num){if(tr[k].cnt>1)tr[k].cnt--,tr[k].sz--;else if(tr[k].ch[0]*tr[k].ch[1]==0)k=max(tr[k].ch[0],tr[k].ch[1]);else rot(k,tr[tr[k].ch[0]].rnd>tr[tr[k].ch[1]].rnd),del(k,num);}else tr[k].sz--,del(tr[k].ch[num>tr[k].v],num); } int main(){scanf("%d%d",&n,&M);for(int i=1;i<=n;i++){scanf("%s%d",op,&xx);if(op[0]=='I'){if(xx>=M)insert(root,xx);}else if(op[0]=='S')dfs(root,-xx);else if(op[0]=='A')dfs(root,xx);else {if(xx<=tr[root].sz)printf("%d\n",rank(root,xx));else puts("-1");}while(tr[root].sz&&(jy=get_min(root))<M)ans++,del(root,jy);}printf("%d\n",ans); }

轉載于:https://www.cnblogs.com/SiriusRen/p/6532155.html

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的BZOJ 1503 treap的全部內容,希望文章能夠幫你解決所遇到的問題。

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