intmain(){ int n, k, t(0), len(1); scanf("%d%d", &n, &k); for (inti(1); i <= n; ++ i) scanf("%d", a + i); std::sort(a + 1, a + n + 1); a[0] = a[1] - 1; for (int i = 2; i <= n; ++ i) if (a[i] != a[i - 1]) q.push(len), len = 1; else ++ len; q.push(len); intans(n); while (q.size() && k --) ans -= q.top(), q.pop(); printf("%d", ans); }
#include<cstdio> #include<algorithm> #define int long long
inlineintmax(constint x, constint y){return x > y ? x : y;} structLine { int l, r; inlinebooloperator < (const Line x) const {return l < x.l;} } a[300005], b[300005];
int cnta, cntb;
signedmain(){ int n, m, ans(0LL), MaxR(0LL), len(0LL); scanf("%lld%lld", &n, &m); for (inti(1); i <= n; ++ i) { int x, y; scanf("%lld%lld", &x, &y); x <= y ? a[++ cnta] = Line {x, y} : b[++ cntb] = Line {y, x}; } std::sort(a + 1, a + cnta + 1), std::sort(b + 1, b + cntb + 1); ans = m; if (cntb == 0) returnprintf("%lld", ans), 0; MaxR = b[1].r, len = b[1].r - b[1].l; for (inti(2); i <= cntb; ++ i) if (b[i].r > MaxR) len += b[i].r - max(MaxR, b[i].l), MaxR = b[i].r; printf("%lld\n", ans + (len << 1)); return0; }
structnode { int l, r, x, p; inlinebooloperator < (const node X) {return x < X.x;} } a[4001]; int f[51][51][4001], g[51][51][4001], h[51][51][4001], Key[4001]; inlineintmax(constint x, constint y){return x > y ? x : y;} inlineintmin(constint x, constint y){return x < y ? x : y;}
intmain(){ int n, m; scanf("%d%d", &n, &m); for (inti(1); i <= m; ++ i) scanf("%d%d%d", &a[i].l, &a[i].r, &a[i].x); std::sort(a + 1, a + m + 1); Key[a[1].p = 1] = a[1].x; for (inti(2); i <= m; ++ i) Key[a[i].p = (a[i].x != a[i - 1].x) + a[i - 1].p] = a[i].x;
for (intk(1); k <= m; ++ k) for (inti(1); i <= a[k].l; ++ i) for (intj(a[k].r); j <= n; ++ j) ++ h[i][j][a[k].p]; for (inti(1); i <= n; ++ i) for (intj(i); j <= n; ++ j) for (intk(a[m].p - 1); k; -- k) h[i][j][k] += h[i][j][k + 1];
for (intl(1); l <= n; ++ l) for (inti(1); i <= n - l + 1; ++ i) { intj(i + l - 1); for (intx(1); x <= m; ++ x) if (a[x].l >= i && a[x].r <= j) { for (intk(i); k <= j; ++ k) g[i][j][a[x].p] = f[i][j][a[x].p] = max(f[i][j][a[x].p], g[i][k - 1][a[x].p] + g[k + 1][j][a[x].p] + (h[i][j][a[x].p] - h[i][k - 1][a[x].p] - h[k + 1][j][a[x].p]) * Key[a[x].p]); } for (intx(a[m].p - 1); x; -- x) g[i][j][x] = max(g[i][j][x], g[i][j][x + 1]); } intans(0); for (inti(1); i <= a[m].p; ++ i) ans = max(ans, f[1][n][i]); printf("%d", ans); }
constint MOD = 1024523; inlineintmax(constint x, constint y){return x > y ? x : y;} inlineintmin(constint x, constint y){return x < y ? x : y;} inlinevoidupd(int& x, constint y){if ((x += y) >= MOD) x -= MOD;} char a[501], b[501]; int dp[2][501][501];
intmain(){ int n, m; scanf("%d%d\n%s\n%s", &n, &m, a + 1, b + 1); std::reverse(a + 1, a + n + 1), std::reverse(b + 1, b + m + 1); dp[0][0][0] = 1; for (registerinti(0); i <= n; ++ i) { int t(i & 1), t2(i - 1 & 1); memset(dp[t], 0, sizeof dp[t]); if (i == 0) dp[0][0][0] = 1; for (registerintj(0); j <= m; ++ j) for (registerintk(max(0, i + j - m)); k <= min(i + j, n); ++ k) { int l(i + j - k), &f(dp[t][j][k]); if (i && k && a[i] == a[k]) upd(f, dp[t2][j][k - 1]); if (i && l && a[i] == b[l]) upd(f, dp[t2][j][k]); if (j && k && b[j] == a[k]) upd(f, dp[t][j - 1][k - 1]); if (j && l && b[j] == b[l]) upd(f, dp[t][j - 1][k]); } } printf("%d", dp[n & 1][m][n]); }