D
Size: a a a
D
PT
ID
RS
PT
D
ID
PT
PT
RS
PT
#include <vector>
#include <cmath>
std::vector<int> u_vec={1};
std::vector<int> last_add={1};
int order=0;
class DoubleLinear
{
public:
//static std::vector<int> u_vec;
static int dblLinear(size_t n){
int my_order=std::ceil(std::log2(n));
if(my_order>order){
update(my_order-order+5);
}
//return u_vec.size();
//if(n>500) return u_vec[n-2];
return u_vec[n];
}
protected:
static void update(int add_order){
if(!add_order) return;
std::vector<int> add;
int reserve=1<<(order+add_order);
u_vec.reserve(reserve);
add.reserve(reserve);
for(auto& x:last_add){
add.push_back(2*x+1);
add.push_back(3*x+1);
}
u_vec.insert(u_vec.end(),add.begin(),add.end());
last_add=add;
order++;
std::sort(u_vec.begin(),u_vec.end());
//u_vec.erase( std::unique( u_vec.begin(), u_vec.end()) );
u_vec.resize(std::unique(u_vec.begin(),u_vec.end())-u_vec.begin());
update(add_order-1);
}
};
C
#include <vector>
#include <cmath>
std::vector<int> u_vec={1};
std::vector<int> last_add={1};
int order=0;
class DoubleLinear
{
public:
//static std::vector<int> u_vec;
static int dblLinear(size_t n){
int my_order=std::ceil(std::log2(n));
if(my_order>order){
update(my_order-order+5);
}
//return u_vec.size();
//if(n>500) return u_vec[n-2];
return u_vec[n];
}
protected:
static void update(int add_order){
if(!add_order) return;
std::vector<int> add;
int reserve=1<<(order+add_order);
u_vec.reserve(reserve);
add.reserve(reserve);
for(auto& x:last_add){
add.push_back(2*x+1);
add.push_back(3*x+1);
}
u_vec.insert(u_vec.end(),add.begin(),add.end());
last_add=add;
order++;
std::sort(u_vec.begin(),u_vec.end());
//u_vec.erase( std::unique( u_vec.begin(), u_vec.end()) );
u_vec.resize(std::unique(u_vec.begin(),u_vec.end())-u_vec.begin());
update(add_order-1);
}
};
PT
D
PT
IZ
PT
NM
RS
RS