constint N = 200005; int n, a[N]; voidsolve(){ read(n); for (registerint i = 1; i <= n; ++i) read(a[i]); longlong now = 0; for (registerint i = 1; i <= n; ++i) if (a[i] > 0) now += a[i], print(now, ' '); elseprint(now + a[i], ' '); putchar('\n'); }
constint N = 200005, P = 998244353; int n, k, a[N]; voidsolve(){ read(n), read(k); longlong sum = 0; int lst = 0, ans = 1; for (registerint i = 1; i <= n; ++i){ read(a[i]); if (a[i] > n - k){ sum += a[i]; if (lst) ans = 1ll * ans * (i - lst) % P; lst = i; } } print(sum, ' '), print(ans); }
constint N = 2000005; // 注意数组开大一倍 int n, d[N]; char s[N]; voidmanacher(int *d, char *s, int n){ for (registerint i = 1, m = 0, r = 0; i <= n; ++i){ d[i] = i > r ? 0 : std::min(r - i + 1, d[m - (i - m)]); while (i - d[i] > 0 && i + d[i] <= n && s[i - d[i]] == s[i + d[i]]) ++d[i]; if (i + d[i] - 1 > r) m = i, r = i + d[i] - 1; } } voidsolve(){ n = reads(s + 1); for (registerint i = n; i; --i) s[i << 1] = s[i], s[i << 1 | 1] = '#'; s[1] = '#', n = n * 2 + 1; manacher(d, s, n); // for (register int i = 1; i <= n; ++i) debug("%d ", d[i]); debug("\n"); int len = 0; for (registerint i = 1; i <= n / 2; ++i) if (s[i] != s[n - i + 1]) break; else ++len; // debug("%d\n", len); int d1 = 0, d2 = 0; for (registerint i = len + 1; i <= (n + 1) / 2; ++i) if (i - d[i] + 1 <= len + 1) d1 = std::max(d1, (i - len) * 2 - 1); for (registerint i = (n + 1) / 2; i <= n - len; ++i) if (i + d[i] - 1 >= n - len) d2 = std::max(d2, (n - len - i + 1) * 2 - 1); if (d1 > d2){ for (registerint i = 1; i <= len + d1; ++i) if (s[i] != '#') putchar(s[i]); for (registerint i = n - len + 1; i <= n; ++i) if (s[i] != '#') putchar(s[i]); } else{ for (registerint i = 1; i <= len; ++i) if (s[i] != '#') putchar(s[i]); for (registerint i = n - len - d2 + 1; i <= n; ++i) if (s[i] != '#') putchar(s[i]); } putchar('\n'); }
int n; std::vector<int> bitcnt; std::vector<std::vector<longlong>> f; std::vector<std::vector<longlong>> g; std::map<std::vector<int>, std::vector<int>> part; std::vector<longlong> ans; voiddfs(int r, const std::vector<int> &l, const std::vector<longlong> &s){ if (!r){ longlong res = 0; int mask = (1 << n) - 1; for (registerint i = 0; i < (1 << n); ++i) if (bitcnt[mask ^ i] & 1) res -= s[i]; else res += s[i]; const std::vector<int> &p = part[l]; for (int v : p) ans[v] += res; return; } int lst = l.empty() ? 1 : l.back(); for (registerint k = lst; k <= r; ++k){ if (k < r && r - k < k) continue; std::vector<int> nl(l); std::vector<longlong> ns(s); nl.push_back(k); for (registerint i = 0; i < (1 << n); ++i) ns[i] *= g[k - 1][i]; dfs(r - k, nl, ns); } } voidsolve(){ read(n); std::vector<std::vector<int>> E(n); for (registerint i = 0; i < n; ++i) for (registerint j = 0; j < n; ++j){ char ch; while (!isdigit(ch = getchar())) ; if (ch == '1') E[i].push_back(j); } bitcnt.resize(1 << n); bitcnt[0] = 0; for (registerint i = 1; i < (1 << n); ++i) bitcnt[i] = bitcnt[i >> 1] + (i & 1); f.resize(n, std::vector<longlong>(1 << n, 0)); g.resize(n, std::vector<longlong>(1 << n, 0)); for (registerint i = 0; i < n; ++i) f[i][1 << i] = 1; for (registerint S = 1; S < (1 << n); ++S) for (registerint i = 0; i < n; ++i) if (f[i][S]){ g[bitcnt[S] - 1][S] += f[i][S]; for (int v : E[i]) if (!(S >> v & 1)) f[v][S | (1 << v)] += f[i][S]; } for (registerint k = 0; k < n; ++k) for (registerint i = 0; i < n; ++i) for (registerint S = 0; S < (1 << n); ++S) if (S >> i & 1) g[k][S] += g[k][S ^ (1 << i)]; for (registerint S = 0; S < (1 << (n - 1)); ++S){ std::vector<int> p; int x = 1; for (registerint i = 0; i < n - 1; ++i) if (S >> i & 1) ++x; else p.push_back(x), x = 1; p.push_back(x); std::sort(p.begin(), p.end()); part[p].push_back(S); } ans.resize(1 << (n - 1), 0); dfs(n, std::vector<int>(), std::vector<longlong>(1 << n, 1)); for (registerint i = 0; i < n - 1; ++i) for (registerint S = 0; S < (1 << (n - 1)); ++S) if (S >> i & 1) ans[S ^ (1 << i)] -= ans[S]; for (longlong v : ans) print(v, ' '); putchar('\n'); }