#include<cstdio> #include<cmath> #define int long long
int N, A, B, monster[100005]; inlineboolcheck(constint k){ intcnt(0); for (inti(1); i <= N; ++ i) if (monster[i] > B * k) cnt += ceil((monster[i] - B * k) * 1.00 / (A - B)); return cnt <= k; }
signedmain(){ scanf("%lld%lld%lld", &N, &A, &B); for (inti(1); i <= N; ++ i) scanf("%lld", monster + i); int l(1), r(1e9), ans(0); while (l <= r) { intmid(l + r >> 1); check(mid) ? ans = mid, r = mid - 1 : l = mid + 1; } returnprintf("%d", ans), 0; }
#include<cstdio> #include<queue> #define int long long
inlineintmax(constint x, constint y){return x > y ? x : y;} std::priority_queue<int, std::vector<int>, std::greater<int> > q1; std::priority_queue<int> q2; int h[300005], s1[300005], s2[300005];
signedmain(){ int n, ans, sum(0); scanf("%lld", &n); for (inti(1); i <= 3 * n; ++ i) scanf("%lld", h + i); for (inti(1); i < n; ++ i) q1.push(h[i]), sum += h[i]; for (inti(n); i <= n << 1; ++ i) { q1.push(h[i]), sum += h[i]; while (q1.size() > n) sum -= q1.top(), q1.pop(); s1[i] = sum; } sum = 0; for (inti(3 * n); i > (n << 1) + 1; -- i) sum += h[i], q2.push(h[i]); for (inti((n << 1) + 1); i > n; -- i){ q2.push(h[i]), sum += h[i]; while (q2.size() > n) sum -= q2.top(), q2.pop(); s2[i] = sum; } ans = s1[n] - s2[n + 1]; for (inti(n + 1); i <= n << 1; ++ i) ans = max(ans, s1[i] - s2[i + 1]); returnprintf("%lld", ans), 0; }
#include<cstdio> #include<algorithm> #define int long long
int a[200005], s[200005], N; structnode { int id, v; inlinebooloperator < (const node x) const {return v < x.v;} } b[200005]; int c[200005]; inlinevoidupdate(constint x){ for (inti(x); i <= N; i += (i & ~i + 1)) ++ c[i]; } inlineintquery(constint x){ intsum(0); for (inti(x); i; i -= (i & ~i + 1)) sum += c[i]; return sum; }
signedmain(){ int n, k, ans(0); scanf("%lld%lld", &n, &k); for (inti(1); i <= n; ++ i) scanf("%lld", a + i); for (inti(1); i <= n; ++ i) s[i] = s[i - 1] + a[i] - k; for (inti(0); i <= n; ++ i) b[i].id = i, b[i].v = s[i]; std::sort(b, b + n + 1); s[b[0].id] = 2; for (inti(1); i <= n; ++ i) s[b[i].id] = s[b[i - 1].id] + (b[i].v != b[i - 1].v); N = s[b[n].id]; update(s[0]); for (inti(1); i <= n; ++ i) ans += query(s[i]), update(s[i]); returnprintf("%lld", ans), 0; }
structLine { int u, v; longlong w; inlinebooloperator < (const Line x) const {return w < x.w;} } e[4000005]; int fa[2005], tot; inlineintfind(constint x){return fa[x] == x ? x : fa[x] = find(fa[x]);}
signedmain(){ int n, cnt(0), k(0); longlongans(0LL); scanf("%d", &n); for (inti(1); i <= n; ++ i) fa[i] = i; for (inti(1); i <= n; ++ i) for (intj(i); j <= n; ++ j) ++ tot, scanf("%d", &e[tot].w), e[tot].u = i - 1, e[tot].v = j; std::sort(e + 1, e + tot + 1); while (cnt < n) { ++ k; if (find(e[k].u) == find(e[k].v)) continue; else fa[find(e[k].u)] = find(e[k].v), ans += e[k].w, ++ cnt; } returnprintf("%lld", ans), 0; }