#include<stdio.h>
long long int pa(long long int x) {
    long long int ans = 0;
    for (long long int i = 2; (i * i * i) <= x; i++) {
         ans += (x / (i * i * i));
    }
    //printf("%lld\n", ans);
    return ans;
}
int main(){
    long long int m;
    while (~scanf("%lld", &m)){
    long long int l = 8;
    long long int r = 1e16;
    long long int cnt = 0;
    int flag = 0;
        cnt = 0;
        flag = 0;
        long long int mid ;
        while (l <= r) {
            mid = (l + r) / 2;
            cnt = pa(mid);
            if (cnt < m) {
                l = mid + 1;
            }
            if (cnt > m) {
                r = mid - 1;
            }
            if (cnt == m) {
                flag = 1;
                while (1) {
                    mid--;
                    cnt = pa(mid);
                    if (cnt != m) {
                        break;
                    }
                }
            }
            if (flag) break;
        }
        //printf("%d", flag);
        if (flag) printf("%lld\n", mid + 1);
        else printf("-1\n");
    }
    return 0;
}

先假定有x这个数,在算出这个数之前有多少组看是否满足题意 进行二分

这是我首次做二分的题 感觉二分是真的快乐