| ||||||||||
| 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 | |||||||||
暴力优化??自底向上??我已经先按k排序了,还是TLE的,看看我程序吧In Reply To:Re:tle说明算法应该对了,然后就是暴力优化-_-b....(其实可以自底向上的) Posted by:ArXoR at 2005-04-05 23:31:34 先说一个问题:开始我只开到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