#include <iostream>
#include<ctime>
#include<queue>
using namespace std;
static int RED=0;
static int BLACK=1;
typedef struct RBNode//定义红黑树结点
{
int color;
int key;
struct RBNode *left;
struct RBNode *right;
struct RBNode *parent;
}RBNode;
typedef struct RBTree//定义红黑树
{
RBNode *root;
RBNode *nil;
}RBTree;
void leftRotate(RBTree *T,RBNode *x)//红黑树左旋操作
{
RBNode *y=x->right;
if(y== nullptr)
return ;
x->right=y->left;
if(y->left!=T->nil)
{
y->left->parent=x;
}
y->parent=x->parent;
if(x->parent==T->nil)
{
T->root=y;
}
else if(x==x->parent->left)
{
x->parent->left=y;
}
else{
x->parent->right=y;
}
y->left=x;
x->parent=y;
}
void rightRotate(RBTree *T,RBNode *x) //红黑树右旋操作
{
if (x->left != T->nil) {
RBNode *y = x->left;
x->left = y->right;
if (y->right != T->nil) {
y->right->parent = x;
}
y->parent = x->parent;
if (x->parent == T->nil) {
T->root = y;
} else if (x == x->parent->left) {
x->parent->left = y;