题解:P10373 [AHOI2024 初中组] 立方根
xiezheyuan · · 题解
首先发现,
因此我们可以找出来每一个块的开始。设
然后我们再处理一个
然后我们考虑如何回答询问,我们可以二分,找出询问的
时间复杂度为
我没有用到
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e4 + 5;
int tab[N], ans[N], q;
signed main(){
cin>>q;
for(int i=1;i<=10000;i++) tab[i] = i * i * i;
for(int i=1;i<=10000;i++) ans[i] = ans[i - 1] + (i - 1) * (tab[i] - tab[i - 1]);
while(q--){
int n;cin>>n;
int pos = upper_bound(tab + 1, tab + 10000 + 1, n) - tab;
cout << (ans[pos - 1] + (pos - 1) * (n - tab[pos - 1] + 1)) << '\n';
}
return 0;
}