两个问题
  • 板块CF955C Sad powers
  • 楼主Eason_AC
  • 当前回复12
  • 已保存回复12
  • 发布时间2021/10/8 16:56
  • 上次更新2023/11/4 04:20:56
查看原帖
两个问题
112917
Eason_AC楼主2021/10/8 16:56

第一,求管理通过一下这个修了 LaTeX\LaTeX 的翻译:

给你 $q$ 个询问,每次询问 $[l,r]$ 这个区间内满足 $x=a^p(a>0,p>1)$ 的 $x$ 的数量。

数据范围:
- $1\leqslant q\leqslant 10^5$。
- $1\leqslant l\leqslant r\leqslant 10^{18}$。

Translated by Eason_AC  
2021.10.8

第二,求问以下代码为什么在 C++14 下可以通过而 C++17 不行?md 就这 sb 玩意浪费我今天大半个下午

#include <bits/stdc++.h>
#define F(T, i, a, b) for(T (i) = (a); (i) <= (b); ++(i))
#define R(T, i, a, b) for(T (i) = (a); (i) >= (b); --(i))
#define Fo(T, i, a, b, c) for(T (i) = (a); (i) <= (b); (i) += (c))
#define Re(T, i, a, b, c) for(T (i) = (a); (i) >= (b); (i) -= (c))
#define For(T, i, a, b, c) for(T (i) = (a); (i) <= (b); (i) *= (c))
#define Rep(T, i, a, b, c) for(T (i) = (a); (i) >= (b); (i) /= (c))
#define Tl template<typename T>
#define Tla template<typename T, typename... Args>
#define ui unsigned int
#define ll long long
#define ull unsigned long long
#define ld long double
#define ib inline bool
#define ii inline int
#define iui inline ui
#define ill inline ll
#define iull inline ull
#define iv inline void
using namespace std;

namespace fastIO {
	Tl iv read(T & x) {T f = 1; x = 0; char c = getchar(); while(!isdigit(c)) {if(c == '-') f = -1; c = getchar();} while(isdigit(c)) {x = x * 10 + c - '0'; c = getchar();} x *= f;}
	Tla iv read(T& x, Args& ...args) {read(x), read(args...);}
	Tl iv write(T x) {if(x < 0) putchar('-'), x = -x; if(x > 9) write(x / 10); putchar(x % 10 + '0');}
	Tl iv print(T x, char ch) {write(x), putchar(ch);}
	iv file(string s) {freopen((s + ".in").c_str(), "r", stdin); freopen((s + ".out").c_str(), "w", stdout);}
}
using namespace fastIO;

namespace Solution {
	const int N = 3e6 + 7;
	const ll MX = 1e18;
	int q, cnt;
	ll l, r, num[N];
	
	ill solve(ll x) {
		ll idx = lower_bound(num + 1, num + cnt + 1, x) - num;
		if((idx <= cnt && num[idx] > x) || idx > cnt) idx--;
		return idx + (ll)sqrt(x);
	}
	
	iv Main() {
		F(ll, i, 2, 1000000) {
			long long k = i * i;
			for(; k <= MX / i; ) {
				k *= i;
				ll sqrtk = sqrt(k);
				if(sqrtk * sqrtk != k) num[++cnt] = k;
			}
		}
		sort(num + 1, num + cnt + 1), cnt = unique(num + 1, num + cnt + 1) - num - 1;
		read(q); while(q--) read(l, r), print(solve(r) - solve(l - 1), '\n');
		return;
	}
}

int main() {
	Solution :: Main();
	return 0;
}
2021/10/8 16:56
加载中...