| ||||||||||
| 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 | |||||||||
Re:应该是超在..."//找到含有最小a的元素",想办法优化吧In Reply To:暴力优化??自底向上??我已经先按k排序了,还是TLE的,看看我程序吧 Posted by:Jin_j_y at 2005-04-06 22:41:31 > 先说一个问题:开始我只开到5000,TLE了,后来我发现问题的规模是50000。为什么5000的时候没有RTE呢?是不是测试数据小于5000的啊?如何这样都TLE,那么我没想法了。
> //#include<fstream>
> #include<iostream>
> #include<algorithm>
> using namespace std;
>
> class Node{
> public:
> int p,a,k;
> Node(){}
> Node(int pp,int aa,int kk):p(pp),a(aa),k(kk){}
> friend bool operator<(const Node& aa,const Node& bb){
> return aa.k<bb.k;
> }
> };
>
> Node * nodes;
> int tree[50000][3];
>
> int DC(int low,int high,int father){
> if(low==high)return 0;
> int mina=40000,mink,minp,mini;
> if(high-low==1){
> mini=nodes[low].p;
> tree[mini-1][1]=0;
> tree[mini-1][2]=0;
> tree[mini-1][0]=father;
> return mini;
> }
> //找到含有最小a的元素
> int i;
> for(i=low;i<high;++i)
> if(mina>nodes[i].a){
> minp=i;
> mina=nodes[i].a;
> mink=nodes[i].k;
> mini=nodes[i].p;
> }
> //递归处理左右子树,排序之后已经保证left<root<right了
> int left=DC(low,minp,mini);
> int right=DC(minp+1,high,mini);
> tree[mini-1][1]=left;
> tree[mini-1][2]=right;
> tree[mini-1][0]=father;
> return mini;
> }
>
>
> int main(){
> //ifstream cin("in.txt");
> int n;
> cin>>n;
> nodes=new Node[n];
> int i,a,k;
> for(i=0;i<n;i++){
> cin>>k>>a;
> nodes[i]=Node(i+1,a,k);
> }
> sort(nodes,nodes+n);//nlog(n)
> DC(0,n,0);
> cout<<"YES"<<endl;
> for(i=0;i<n;i++){
> cout<<tree[i][0]<<" "<<tree[i][1]<<" "<<tree[i][2]<<endl;
> }
> return 0;
> }
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator