mathematical formula:
四面体数
也叫三角锥体数是可以排成底为三角形的锥体(即四面体)的数。四面体数每层为三角形数,其公式是首n个三角形数之和,即
n(n+1)(n+2)/6
其首几项为:1, 4, 10, 20, 35, 56, 84, 120.
(1) 先在vector里标记每个i对应的vec[i];即vec[i]为排列[1,i]存在时的最小数;
vec[i]=(1,2,3,...,i)(i,i-1,i-2,...,1)=i(i+1)(i+2)/6;
(2) 找出n所属的i;即vec[i-1] <= n <vec[i]; i+1为排列的mex值;
ll binarys(ll n, vector<ll>& vec) {//拷贝极花时间,记得加引用;
ll left = 1; ll right = 2000000;
while (left <= right) {
ll middle = (left + right) / 2;
if (vec[middle] > n)right = middle - 1;
else left = middle + 1;
}
return left;//用二分直接取出i+1;
}
void solve() {
vector<ll> vec(2000001);
for (ll l = 1; l <= 2000000; l++) {
vec[l] = l * (l + 1) * (l + 2) / 6;//(1)
}
int t; cin >> t;
while (t--) {
ll n; cin >> n;
cout << binarys(n, vec)<<endl;//(2)
}

京公网安备 11010502036488号