void erase(int &x,int val)
{
if(!x)return;
treap[x].size--;
int d=treap[x].cmp(val);
if(d==-1)
{
if(treap[x].num>1)
{
treap[x].num--;
return;
}
int lch=treap[x].ch[0];
int rch=treap[x].ch[1];
if(!lch||!rch)
{
x=lch+rch;
}
else
{
int d2=treap[lch].pri>treap[rch].pri;
rotate(x,d2);
erase(x,val);//??
}
}
erase(treap[x].ch[d],val);
}