AcWing 113. 特殊排序
Posted acmloser
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AcWing 113. 特殊排序相关的知识,希望对你有一定的参考价值。
原题链接
考察:二分
错误思路:
分治.将第一个数和其他所有数比较完后,确定第一个数的位置.然后递归左右半边.
只过了10个数据,剩下的超过10000次.
思路:
vector装已经排好的序列,对于新的枚举数,二分求适合它的位置.
Code
// Forward declaration of compare API.
// bool compare(int a, int b);
// return bool means whether a is less than b.
class Solution {
public:
vector<int> v;
vector<int> specialSort(int N) {
v.push_back(1);
for(int i=2;i<=N;i++)
{
int l = 0,r = v.size()-1;
while(l<r)
{
int mid = l+r>>1;
if(!compare(v[mid],i)) r = mid;
else l = mid+1;
}
v.push_back(i);
if(compare(v[r],i)) r++;
for(int i=v.size()-2;i>=r;i--) swap(v[i+1],v[i]);
}
return v;
}
// void cmp(vector<int> T,int sta){
// if(T.size()==0) return;
// vector<int> L,R;
// for(int i=1;i<T.size();i++)
// if(!compare(T[0],T[i])) L.push_back(T[i]);
// else R.push_back(T[i]);
// v[sta+L.size()] = T[0];
// printf("%d %d\\n",cnt+L.size(),T[0]);
// cmp(L,sta);
// cmp(R,sta+L.size()+1);
// }
};
以上是关于AcWing 113. 特殊排序的主要内容,如果未能解决你的问题,请参考以下文章