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;
}
#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;
}
相关文章推荐
- FZU 1492 地震预测(模拟链表)(技巧题)
- FZU 1492 地震预测(模拟链表)(技巧题)
- FZU 1492 地震预测(模拟链表的应用)(Java实现)
- FZU 1492 地震预测(模拟链表)(技巧题)
- FZU 1492 地震预测(模拟链表)(技巧题)
- FZU 1492 地震预测(模拟链表)(技巧题)
- FZU 1492 地震预测(模拟链表)(技巧题)
- FZU 1492 地震预测(模拟链表)(技巧题)
- FZU 1492 地震预测(模拟链表)(技巧题)
- FZU 1492 地震预测(模拟链表)(技巧题)
- FZU 1492 地震预测(模拟链表)(技巧题)
- FZU 1492 地震预测(模拟链表)(技巧题)
- FZU 1492 地震预测 【思路题】
- FZU 1492 地震预测(模拟链表)(技巧题)
- FZU - 1492(Problem 1492 地震预测)
- FZU 1492 地震预测(模拟链表)(技巧题)
- FZU 1492 地震预测(模拟链表)(技巧题)
- FZu Problem 1492 地震预测
- FZU 2282 错排
- FZU 1649 Prime number or not (大素数判定)