Lang:G++
Edit12345678910111213141516171819202122232425262728293031#include<cstdio>#include<algorithm>using namespace std;const int inf=~0U>>1;struct node {int key,size;node*c[2];node(int _key,int _size,node*_c):key(_key),size(_size) {c[0]=c[1]=_c;}void rz() {size=c[0]->size+c[1]->size+1;}} TNull(0,0,0),*Null=&TNull;int n,a;char c;node*root;void rot(node*&t,bool d) {node*p=t->c[d];t->c[d]=p->c[!d];p->c[!d]=t;t->rz();p->rz();t=p;}void maintain(node*&t,bool d) {if(t==Null) return;node*&p=t->c[d];if(p->c[d]->size>t->c[!d]->size)rot(t,d);