Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
用Treap做会TLE么?求救大牛啊!!!#include"iostream" #include"cstring" using namespace std; struct NOD { char *data; int priority; NOD *left,*right; NOD() { data=0; priority=0; left=0; right=0; } NOD(char *data,int priority) { this->data=new char[strlen(data)+1]; strcpy(this->data,data); this->priority=priority; left=0; right=0; } }; bool cmp(NOD *r,NOD *l) { if(l==0) return r==0; else return r==0 || r->priority>l->priority; } class Treap { public: NOD *root; Treap(){root=0;}; void Insert(NOD* &nod,NOD *ins); void Delete(NOD* &nod,char* del); void LL(NOD* &nod); void RR(NOD* &nod); NOD * Find(NOD* &root,char* x); }; void Treap::Insert(NOD* &nod,NOD *ins) { if(nod==0) nod=ins; else { if(strcmp(nod->data,ins->data)<0) { Insert(nod->right,ins); if(cmp(nod->right,nod)) this->LL(nod); } else if(strcmp(nod->data,ins->data)>0) { Insert(nod->left,ins); if(cmp(nod->left,nod)) this->RR(nod); } } } void Treap::Delete(NOD* &nod,char* del) { if(nod==0) return; if(strcmp(nod->data,del)>0) { this->Delete(nod->left,del); } else if(strcmp(nod->data,del)<0) { this->Delete(nod->right,del); } else { if(nod->left==0 && nod->right==0) { delete nod; nod=0; } else if(cmp(nod->left,nod->right)) { this->RR(nod); this->Delete(nod->right,del); } else { this->LL(nod); this->Delete(nod->left,del); } } } void Treap::LL(NOD* &nod) { NOD *temp=nod->right; nod->right=temp->left; temp->left=nod; nod=temp; } void Treap::RR(NOD* &nod) { NOD *temp=nod->left; nod->left=temp->right; temp->right=nod; nod=temp; } NOD* Treap::Find(NOD* &root,char* x) { if(root==0) return 0; if(strcmp(root->data,x)==0) return root; else if(strcmp(root->data,x)>0) return Find(root->left,x); else return Find(root->right,x); } void print(NOD * nod) { if(nod==0) return; printf("("); print(nod->left); printf("%s/%d",nod->data,nod->priority); print(nod->right); printf(")"); } int main() { int n; while(EOF!=scanf("%d",&n) && n) { Treap treap; char data[1000]; char ch; int p,priority; int i; for(i=0;i<n;i++) { p=0; getchar(); while((ch=getchar())!='/') { data[p++]=ch; } data[p]=0; scanf("%d",&priority); NOD* nod=new NOD(data,priority); treap.Insert(treap.root,nod); } print(treap.root); putchar(10); } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator