voidsolve(){ int x, y, z; cin >> x >> y >> z; for (int bit = 0; bit < 30; bit++) { vector v{x >> bit & 1, y >> bit & 1, z >> bit & 1}; sort(v.begin(), v.end()); if (v == vector{0, 1, 1}) { cout << "NO" << endl; return; } } cout << "YES" << endl; return; }
map<int, int> mp; for (int i = 0; i < n; i++) { int x; cin >> x; mp[x]++; }
ll sum = 0; int cnt = 0; vector<int> vec; for (auto [k, v] : mp) { if (v & 1) { vec.push_back(k); v--; } sum += 1LL * v * k; cnt += v; } ll res = 0; if (cnt > 2) { res = sum; } for (int i = vec.size() - 1; i > 0; i--) { int x = vec[i - 1]; int y = vec[i]; if (y < x + sum) { res = max(res, sum + x + y); } } for (int i = vec.size() - 1; i >= 0; i--) { if (vec[i] < sum) { res = max(res, sum + vec[i]); } } cout << res << endl; return; }
using ll = longlong; using ull = unsignedlonglong; using ulll = unsigned __int128;
constexprint inf = 0x3f3f3f3f;
structsieve { vector<int> minp, primes; sieve(int N = 1E7 + 1) : minp(N) { minp[1] = 1; for (int n = 2; n < N; n++) { if (!minp[n]) { minp[n] = n; primes.push_back(n); } for (int p : primes) { if (1ll * n * p >= N) break; minp[n * p] = p; if (p == minp[n]) { break; } } } } } sieve;
voidsolve(){ int n, m; cin >> n >> m; auto p = *--ranges::upper_bound(sieve.primes, n); ll res = 0; set<int> vec; { int xx = n; while (xx > 1) { int p = sieve.minp[xx]; vec.insert(p); while (xx % p == 0) { xx /= p; } } } for (int x = n - 1; x >= p; x--) { int xx = x; while (xx > 1) { int p = sieve.minp[xx]; vec.insert(p); while (xx % p == 0) { xx /= p; } } ll aans = inf; for (auto p : vec) { ll ans1 = 0; ll ans2 = 0; for (ll pp = p; pp <= x; pp *= p) { ans1 += x / pp; } for (ll pp = p; pp <= n; pp *= p) { ans2 += n / pp; } for (ll pp = p, cnt = 1; pp <= m; pp *= p, cnt++) { if (ans1 / cnt != ans2 / cnt) { aans = min(aans, ans1 / cnt); } } } res += aans; } cout << res << endl; }