Doubt in treap



First of all, isn’t treap a self-balancing tree? If so, why isn’t there any rotation operations in it?

But in another implementations, I saw the use of rotation

Which one is better for competitive programming?

Also, I have a doubt in the following code

void split (pitem t, int key, pitem & l, pitem & r) {
if (! t)
l = r = NULL;
else if (key key)
split (t-> l, key, l, t-> l), r = t;
split (t-> r, key, t-> r, r), l = t;

Shouldn’t the split be

split (t-> l, key, l, r-> l), r = t;

split (t-> r, key, l-> r, r), l = t;

Also, is the assignment (r=t and l=t) taking place before split or after it?