題目為bzoj1901.
單點修改區間第k大,如果卡記憶體你要怎麼辦:
hq說線段樹套平衡樹比樹狀陣列套線段樹好得多……
所以我就寫了……
然後就寫了(n ^ log^3n),在zju上t掉了qaq
卡記憶體還卡時間真是有夠過分……
其實就是外層線段樹存一下根然後按照正常的treap寫就好了,但是有乙個問題就是treap的刪點……這個東西不要寫掛就好了……
#include
#include
#include
#include
#include
#include
#define rep(i,n) for(int i = 1; i <= n ; i ++)
#define repg(i,x) for(int i = head[x] ;~ i ; i = edge[i].next)
#define rep_0(i,n) for(int i = 0 ; i < n ; i ++)
#define rd(i,x,n) for(int i = x; i <= n ; i ++)
#define clr(a,b) memset(a,b,sizeof(a))
#define u t[x]
#define o t[y]
#define lc ch[0]
#define rc ch[1]
#define tc ch[ty]
#define vc ch[!ty]
#define ulfc t[u.lc]
#define urtc t[u.rc]
using namespace std;
const
int inf = (int)1e+9;
typedef long
long ll;
int read()
const
int n = 50005;
int n,m,a[n],tot;
struct treap}t[n * 16];
void upd(int x)
void rot(int &x,bool ty)
void ins(int &x,int val)
if(val == u.val)
bool ty = val > u.val;
ins(u.tc,val);
t[u.tc].fix > u.fix ? rot(x,ty) : upd(x);
}void del(int &x,int val)
rot(x,ty),del(u.vc,val);
}else u.cnt --;
}else del(u.ch[val > u.val],val);
upd(x);
}int getrank(int x,int w)
#define rt 1,1,n
#define lson x << 1,l,mid
#define rson x << 1 | 1,mid + 1,r
int sg[n << 2];
void build(int x,int l,int r)
void segc(int x,int l,int r,int pos,int s,int val)
void change(int pos,int s)
int calc(int x,int l,int r,int ql,int qr,int w)
int mid = l + r >> 1,ranking = 0;
if(ql <= mid)ranking += calc(lson,ql,qr,w);
if(mid < qr)ranking += calc(rson,ql,qr,w);
return ranking;
}int main ()
else
printf("%d\n",l == inf ? -1 : l);}}
return
0;}
在刪除時,如果在if之前減掉的話,就會掛掉,因為你要遞迴下去刪這個節點,這樣的話cnt就不是0了,然後就掛掉了。
其實好像挺簡單的……
初學樹套樹 線段樹套Treap
樹套樹是乙個十分神奇的演算法,種類也有很多 像什麼樹狀陣列套主席樹 樹狀陣列套值域線段樹 zkw 線段樹套 vector 等等。不過,像我這麼弱,當然只會最經典的線段樹套 treap 啦。線段樹我相信大家都會的,treap 可以看一下這篇部落格 簡析平衡樹 二 treap 線段樹套 treap 的思...
Zoj 2112 線段樹套Treap
樹套樹入門題 樹套樹空間複雜度分析 維護乙個長度為n的序列,線段樹的結點數一般為4n,而treap則是對於每乙個元素 包括重複出現的 都需要乙個空間,那麼第1層的所需要的空間為 1 n 第二層為 2 n 2 所以其實為o h n.那麼所需的空間為o nlog n 但在實際運用中,所形成的線段樹往往不...
BZOJ2141 排隊(線段樹套Treap)
點此看題面 大致題意 給你乙個序列,每次交換兩個數,求每次操作後的逆序對個數。推薦先去看一下這道題目 洛谷3759 tjoi2017 不勤勞的圖書管理員 貌似是此題的公升級版 推薦先去學一學線段樹套 treap 當然你也可以學習 hl666 奆佬分塊狂踩樹套樹 做了上面給出的那道題目,這道題目就是一...