头函数 algorithm 中有一个函数是 upper_bound(start,end,value)
?
它可以返回区间 [start,end] 中第一个大于等于 value 的值的位置
?
再加上 vector 中自带的插入函数 insert(space,value) 就可以对数据进行类似于二分排序的排序
?
时间复杂度(预期):n * logn * logn
?
代码如下
#include<cstdio>
#include<vector>
#include<iostream>
#include<algorithm>
using namespace std;
vector<int> asd;
inline int read() //快读加速
{
char ch=getchar();
int res(0),status(1);
while(ch<‘0‘||ch>‘9‘)
{
if(ch==‘-‘)
status=-1;
ch=getchar();
}
while(ch>=‘0‘&&ch<=‘9‘)
{
res=res*10+ch-‘0‘;
ch=getchar();
}
return status*res;
}
int main()
{
int n;
n=read();
for(register int i=1,t;i<=n;i++)
t=read(),
asd.insert(upper_bound(asd.begin(),asd.end(),t),t);
for(vector<int>::iterator it=asd.begin();it!=asd.end();it++)
printf("%d ",*it);
return 0;
}
?
?
?
例题
原文:https://www.cnblogs.com/GlareGlimmering/p/14691826.html