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 |
不会笛卡尔==字符排序+数字RMQ+DFSIn Reply To:先字符串排序,再建笛卡儿树,但还是time limited exceed?????? Posted by:tank_cs at 2007-04-07 15:05:49 > 先字符串排序,再建笛卡儿树,但还是time limited exceed??????请问各位大哥是什么回事 > > #include <utility> > #include <string> > #include <iostream> > #include <algorithm> > using namespace std; > > bool operator<(const pair<string,int> &a1, const pair<string,int> &a2) > { > return a1.first< a2.first; > } > > struct node{ > pair<string,int> data; > node *lchild, *rchild; > node(){ > lchild=NULL; > rchild=NULL; > } > }; > > class treap{ > private: > node *root; //指向根结点的头指针 > public: > treap(){ > root=NULL; > } > treap(node *n){ > root=n; > } > void insert(node * n); > void print_tree(); > void print_node(node * n); > }; > > void treap::print_tree() > { > print_node(root); > } > void treap::print_node(node *n){ > if(n!=NULL) > { > cout<<"("; > print_node(n->lchild); > cout<<n->data.first<<"/"<<n->data.second; > print_node(n->rchild); > cout<<")"; > } > > } > > void treap::insert(node * n) > { > node * insert_pos; > node * insert_pos_parent; > node * index; > // bool is_found; > > if (root==NULL) > { > root=n; > return; > } > > index=root; > insert_pos_parent=NULL; > insert_pos=NULL; > > while(index!=NULL) > { > if(index->data.second < n->data.second){ > insert_pos=index; > break; > } > insert_pos_parent=index; > index=index->rchild; > } > if(insert_pos_parent==NULL) > { > n->lchild=root; > root=n; > return; > } > insert_pos_parent->rchild=n; > n->lchild=insert_pos; > > } > int main() > { > int count,i,number; > string str; > char c; > pair<string,int> a[50000]; > > while (1) > { > cin>>count; > if(count==0) > break; > > for(i=0; i<count; i++) > { > str=""; > while(cin>>c) > { > if(c!='/') > str+=c; > else{ > cin>>number; > a[i]=make_pair(str,number); > break; > } > } > } > sort(a,a+count); > /* for (i=0;i<count;i++) > { > cout<<a[i].first<<"**"<<a[i].second<<" "; > } > cout<<endl; > */ > treap tp; > for (i=0;i<count;i++) > { > node *n=new node(); > n->data=a[i]; > tp.insert(n); > } > tp.print_tree(); > cout<<endl; > } > } > > > Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator