您的位置:首页 > 其它

FZU1492

2007-04-25 15:06 288 查看
本题基于插入排序,不过用了STL容器set来做存储,因此插入结点成了O(logn)时间,总的时间复杂度大概到O(nlogn),利用了set的排序性质,省去了写二叉树的麻烦,起初用的n^2的扫描和快排后左右扫描的算法都不见理想.


#include<stdio.h>


#include<limits.h>


#include<set>


using namespace std;


int main()




...{


int n;


while(scanf("%d",&n)!=EOF)




...{


int*a=new int
;


int i;


for(i=0;i<n;++i)


scanf("%d",&a[i]);


int sum=a[n-1];


multiset<int> SI;


multiset<int>::iterator pib,ite;


SI.insert(a[n-1]);


for(i=n-2;i>=0;--i)




...{


pib=SI.insert(a[i]);


int min=INT_MAX;


ite=pib;


if(ite!=SI.begin())


min=a[i]-*(--ite);


ite=pib;


if(++ite!=SI.end())




...{


int temp=*ite-a[i];


if(temp<min)


min=temp;


}


sum+=min;


}


printf("%d ",sum);


delete[]a;


}


return 0;


}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: