这种类似于套模板了
#include <iostream>
#include <algorithm>
using namespace std;
struct node{
int data;
node* left;
node* right;
};
int getheight(node* root){
if(root==NULL){
return 0;
}
int l=getheight(root->left);
int r=getheight(root->right);
return max(l,r)+1;
}
node* leftrotate(node* root){
node* temp=root->right;
root->right=temp->left;
temp->left=root;
return temp;
}
node* rightrotate(node* root){
node* temp=root->left;
root->left=temp->right;
temp->right=root;
return temp;
}
node* leftrightrotate(node* root){
root->left=leftrotate(root->left);
return rightrotate(root);
}
node* rightleftrotate(node* root){
root->right=rightrotate(root->right);
return leftrotate(root);
}
node* insert(node* root,int val){
if(root==NULL){
root=new node;
root->data=val;
root->left=root->right=NULL;
}else if(val<root->data){
root->left=insert(root->left,val);
int l=getheight(root->left);
int r=getheight(root->right);
if(l-r>=2){
if(val<root->left->data){
root=rightrotate(root);
}else{
root=leftrightrotate(root);
}
}
}else{
root->right=insert(root->right,val);
int l=getheight(root->left);
int r=getheight(root->right);
if(r-l>=2){
if(val>root->right->data){
root=leftrotate(root);
}else{
root=rightleftrotate(root);
}
}
}
return root;
}
int main(){
int n;
cin>>n;
node* root=NULL;
for(int i=0;i<n;i++){
int temp;
cin>>temp;
root=insert(root,temp);
}
printf("%d",root->data);
return 0;
}