2025-1-6 / 2025-1-7 做题笔记

2025-1-6 / 2025-1-7 做题笔记

持续更新中……

目录
  • 2025-1-6 / 2025-1-7 做题笔记
    • P11365 [Ynoi2024] 新本格魔法少女りすか
    • CF1693D - Decinc Dividing
    • AT UTPC2023G - Graph Weighting
    • ABC269Ex - Antichain

P11365 [Ynoi2024] 新本格魔法少女りすか

ケロシの代码
namespace IO {char buf[1024], * p1 = buf, * p2 = buf;inline char gc() {if(p1 == p2) {p2 = buf + fread(buf, 1, sizeof buf, stdin);p1 = buf;}return p1 == p2 ? EOF : * p1 ++;}int read() {int res = 0;char c = gc();while(c < '0' || c > '9') {c = gc();}while('0' <= c && c <= '9') {res = (res << 3) + (res << 1) + (c ^ 48);c = gc();}return res;}
}
using IO :: read;
const int N = 5e5 + 5;
const int B = 409;
const int M = (N >> 6) + 3;
const int SN = N / B + 5;
int n, m, a[N];
int sn, st[SN], ed[SN], p[N];
int c[N];
ll s[N], ans[N];
vector<PII> e[N];
bitset<N> b[SN];
void build() {for(int l = 1, r = B; l <= n; l += B, r += B) {sn ++;st[sn] = l;ed[sn] = min(r, n);}FOR(i, 1, sn) {FOR(j, st[i], ed[i]) {p[j] = i;}}
}
struct fenwick {ull b[M]; int c[M]; void init() {memset(b, 0, sizeof b);memset(c, 0, sizeof c);}inline int lowbit(int x) {return - x & x;}inline void modify(int u) {b[u >> 6] |= (1ull << (u & 63));for(int i = (u >> 6) + 1; i < M; i += lowbit(i))c[i] ++;}inline void clear(int u) {b[u >> 6] = 0;for(int i = (u >> 6) + 1; i < M && c[i]; i += lowbit(i)) c[i] = 0;}inline int query(int u) {u ++;int res = __builtin_popcountll(b[u >> 6] & ((1ull << (u & 63)) - 1));for(int i = u >> 6; i; i -= lowbit(i))res += c[i];return res;}
} t;
void solve() {n = read(); m = read();FOR(i, 1, n) a[i] = read();build();FOR(i, 1, m) {int k; k = read();REP(_, k) {int l, r;l = read(); r = read();if(k == 1) break;e[i].push_back({l, r});int pl = p[l], pr = p[r];FOR(j, pl + 1, pr - 1) b[j][i] = 1;}}FOR(i, 1, sn) if(b[i].count()) {memset(c, 0, sizeof c);FOR(j, st[i], ed[i]) c[a[j]] ++;FOR(j, 1, n) c[j] += c[j - 1];FOR(j, 1, st[i] - 1) s[j] = c[n] - c[a[j]];FOR(j, st[i], ed[i]) s[j] = 0;FOR(j, ed[i] + 1, n) s[j] = c[a[j] - 1];FOR(j, 1, n - 1) s[j + 1] += s[j];FOR(j, 1, m) if(b[i][j]) {int k = 0;for(; k < SZ(e[j]); k ++) {int l, r; tie(l, r) = e[j][k];if(r >= st[i]) break;ans[j] += s[r] - s[l - 1];}for(k ++; k < SZ(e[j]); k ++) {int l, r; tie(l, r) = e[j][k];if(l > ed[i]) break;}for(; k < SZ(e[j]); k ++) {int l, r; tie(l, r) = e[j][k];int pl = p[l], pr = p[r];if(pl == pr) {ans[j] += s[r] - s[l - 1];}else {ans[j] += s[ed[pl]] - s[l - 1];ans[j] += s[r] - s[st[pr] - 1];}}}}FOR(i, 1, m) {int cnt = 0;for(auto h : e[i]) {int l, r; tie(l, r) = h;int pl = p[l], pr = p[r];if(pl == pr) {FOR(j, l, r) ans[i] += t.query(a[j]);FOR(j, l, r) t.modify(a[j]), cnt ++;}else {FOR(j, l, ed[pl]) ans[i] += t.query(a[j]);FOR(j, st[pr], r) ans[i] += t.query(a[j]);FOR(j, l, ed[pl]) t.modify(a[j]), cnt ++;FOR(j, st[pr], r) t.modify(a[j]), cnt ++;}}if(cnt > 2500) {t.init();continue;}for(auto h : e[i]) {int l, r; tie(l, r) = h;int pl = p[l], pr = p[r];if(pl == pr) {FOR(j, l, r) t.clear(a[j]);}else {FOR(j, l, ed[pl]) t.clear(a[j]);FOR(j, st[pr], r) t.clear(a[j]);}}}FOR(i, 1, m) cout << ans[i] << endl;
}

CF1693D - Decinc Dividing

ケロシの代码
const int N = 2e5 + 5;
const int INF = 1e9 + 7;
int n, a[N], f[N], g[N];
void solve() {cin >> n;FOR(i, 1, n) cin >> a[i];ll ans = 0;int lst = n;FOR(i, 1, n) f[i] = INF, g[i] = - INF;ROF(l, n, 1) {f[l] = - INF; g[l] = INF;FOR(r, l + 1, n) {int F = INF, G = - INF;if(a[r - 1] > a[r]) chmin(F, f[r - 1]);if(g[r - 1] > a[r]) chmin(F, a[r - 1]);if(a[r - 1] < a[r]) chmax(G, g[r - 1]);if(f[r - 1] < a[r]) chmax(G, a[r - 1]);if(F == INF && G == - INF) {lst = r - 1;break;}if(F == f[r] && G == g[r]) break;f[r] = F, g[r] = G;} ans += lst - l + 1;}cout << ans << endl;
}

AT UTPC2023G - Graph Weighting

ケロシの代码
const int N = 1e5 + 5;
const int M = 4e5 + 5;
const ll LNF = 1e18;
int n, m, k, V;
int fi[N], ne[M], to[M], ecnt;
int dfn[N], low[N], cnt;
int vis[N], dct;
PII dcc[N];
vector<int> e[N];
ll dp[N], f[N], g[N];
int p[N];
struct Node {int b, x;bool operator > (const Node & A) const {return 1ll * b * (x * 2 + 1) > 1ll * A.b * (A.x * 2 + 1);}
};
void add(int u, int v) {ne[++ ecnt] = fi[u];to[ecnt] = v;fi[u] = ecnt;
}
void tarjan(int u) {dfn[u] = low[u] = ++ cnt;for(int i = fi[u]; i; i = ne[i]) {int v = to[i];if(! dfn[v]) {tarjan(v);chmin(low[u], low[v]);}else {chmin(low[u], dfn[v]);}}
}
void dfs(int u, int dc) {vis[u] = 1;FI(dcc[dc]) ++;for(int i = fi[u]; i; i = ne[i]) {int v = to[i];if(vis[v] == 0) {if(low[v] >= dfn[u]) {dct ++;FI(dcc[dct]) ++;dfs(v, dct);}else {dfs(v, dc);}} else if(vis[v] == 1) {SE(dcc[dc]) ++;}}vis[u] = 2;
}
void slv(int l, int r, int pl, int pr) {if(l > r) return;int mid = l + r >> 1;int pos = pl;FOR(i, pl, min(pr, mid))if(f[i] + g[mid - i] <= f[pos] + g[mid - pos])pos = i;p[mid] = pos;slv(l, mid - 1, pl, pos);slv(mid + 1, r, pos, pr);
}
void solve() {cin >> n >> m >> k >> V;REP(_, m) {int u, v;cin >> u >> v;add(u, v); add(v, u);}tarjan(1); dfs(1, 0);FOR(i, 1, dct) e[FI(dcc[i])].push_back(SE(dcc[i]));FOR(i, 1, k) dp[i] = LNF;dp[0] = 0;FOR(i, 2, n) if(! e[i].empty()) {FOR(j, 1, k / (i - 1)) g[j] = LNF;g[0] = 0;priority_queue<Node, vector<Node>, greater<Node>> pq;for(int b : e[i]) pq.push({b, 0});FOR(j, 1, k / (i - 1)) {if(pq.empty()) break;auto h = pq.top();pq.pop();g[j] = g[j - 1] + 1ll * h.b * (h.x * 2 + 1);if(h.x < V - 1) pq.push({h.b, h.x + 1});}REP(j, i - 1) {int len = 0;for(int l = j; l <= k; l += i - 1)f[++ len] = dp[l];slv(1, len, 1, len);ROF(l, len, 1) chmin(dp[(l - 1) * (i - 1) + j], dp[(p[l] - 1) * (i - 1) + j] + g[l - p[l]]); }}FOR(i, 0, k) cout << (dp[i] >= LNF ? - 1 : dp[i]) << " "; cout << endl;
}

ABC269Ex - Antichain

ケロシの代码
const int N = 2e5 + 5;
const int P = 998244353;
inline int add(int x, int y) { return (x + y < P ? x + y : x + y - P); }
inline void Add(int & x, int y) { x = (x + y < P ? x + y : x + y - P); }
inline int sub(int x, int y) { return (x < y ? x - y + P : x - y); }
inline void Sub(int & x, int y) { x = (x < y ? x - y + P : x - y); }
inline int mul(int x, int y) { return (1ll * x * y) % P; }
inline void Mul(int & x, int y) { x = (1ll * x * y) % P; }
int fp(int x, int y) {int res = 1;for(; y; y >>= 1) {if(y & 1) Mul(res, x);Mul(x, x);}return res;
}
int r[N << 2], a[N << 2], b[N << 2];
void NTT(int * a, int lim, int o) {REP(i, lim) if(i < r[i]) swap(a[i], a[r[i]]);for(int i = 1; i < lim; i <<= 1) {int wn = fp(o == 1 ? 3 : (P + 1) / 3, (P - 1) / (i << 1));for(int j = 0; j < lim; j += (i << 1)) {for(int k = 0, w = 1; k < i; k ++, Mul(w, wn)) {int x = a[j + k];int y = mul(a[j + k + i], w);a[j + k] = add(x, y);a[j + k + i] = sub(x, y);}}}if(o == 1) return;int inv = fp(lim, P - 2);REP(i, lim) Mul(a[i], inv);
}
VI conv(VI A, VI B) {int n = SZ(A), m = SZ(B);int lim = 1, l = 0;while(lim < n + m) lim <<= 1, l ++;REP(i, lim) r[i] = (r[i >> 1] >> 1) | ((i & 1) << (l - 1));REP(i, lim) a[i] = b[i] = 0;REP(i, n) a[i] = A[i];REP(i, m) b[i] = B[i];NTT(a, lim, 1);NTT(b, lim, 1);REP(i, lim) Mul(a[i], b[i]);NTT(a, lim, - 1);VI C(n + m - 1);REP(i, n + m - 1) C[i] = a[i];return C;
}
VI add(VI A, VI B) {int n = SZ(A), m = SZ(B);VI C(max(n, m));REP(i, n) Add(C[i], A[i]);REP(i, m) Add(C[i], B[i]);return C;
}
int n, p[N];
int fi[N], ne[N], to[N], ecnt;
int sz[N], son[N];
int dfn[N], rnk[N], top[N], til[N], cnt;
VI F[N], A[N]; int len;
void add_edge(int u, int v) {ne[++ ecnt] = fi[u];to[ecnt] = v;fi[u] = ecnt;
}
void dfs1(int u) {sz[u] = 1;son[u] = - 1;for(int i = fi[u]; i; i = ne[i]) {int v = to[i];dfs1(v);sz[u] += sz[v];if(son[u] == - 1 || sz[son[u]] < sz[v]) son[u] = v;}
}
void dfs2(int u, int tp) {dfn[u] = ++ cnt;rnk[cnt] = u;top[u] = tp;til[tp] = u;if(son[u] != - 1) dfs2(son[u], tp);for(int i = fi[u]; i; i = ne[i]) {int v = to[i];if(v == son[u]) continue;dfs2(v, v);}
}
VI prod(int l, int r) {if(l > r) return {1};if(l == r) {return A[l];}int mid = l + r >> 1;return conv(prod(l, mid), prod(mid + 1, r));
}
pair<VI, VI> slv(int l, int r) {if(l == r) {int u = rnk[l]; len = 0;for(int i = fi[u]; i; i = ne[i]) {int v = to[i];if(v == son[u]) continue;A[++ len] = F[v];}return {prod(1, len), {1}};}int mid = l + r >> 1;auto L = slv(l, mid);auto R = slv(mid + 1, r);return {conv(FI(L), FI(R)), add(SE(L), conv(FI(L), SE(R)))};
}
void solve() {cin >> n;FOR(i, 2, n) cin >> p[i];FOR(i, 2, n) add_edge(p[i], i);dfs1(1); dfs2(1, 1);ROF(u, n, 1) if(top[u] == u) {auto h = slv(dfn[u], dfn[til[u]]);SE(h).insert(SE(h).begin(), 0);int v = dfn[p[u]];F[u] = add(FI(h), SE(h));}F[1].resize(n + 1);FOR(i, 1, n) cout << F[1][i] << endl;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/867099.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【每日一题】20250110

可人生就是要不断地做选择啊。总不能因为怕选择,就永远停留在原地吧。【每日一题】从区间 \([0,1]\) 随机抽取 \(2n\) 个数 \(x_1,x_2,\ldots,x_n,y_1,y_2,\ldots,y_n\),构成 \(n\) 个数对 \(( x_1, y_1)\), \(( x_2, y_2) , \ldots\), \(( x_n, y_n)\),其中两数的平方和小于…

龙哥量化:文华8程序化名词解释WH8程序化交易:支持一开一平的信号过滤模型,也支持多次开仓多次平仓的加减仓模型;支持一根K线一个信号的模型,也支持一根K线多个信号的模型。

如果您需要代写技术指标公式, 请联系我。 龙哥QQ:591438821 龙哥微信:Long622889 也可以把您的通达信,文华技术指标改成TB交易开拓者、金字塔、文华8的自动交易量化策略 WH8程序化交易:支持一开一平的信号过滤模型,也支持多次开仓多次平仓的加减仓模型;支持一根K线一个信…

2024年终总结-gxngxngxn

2024年终总结-gxngxngxn 引言 原本应该早就写完这一篇年终总结的,但由于期末和一些琐事,一直没时间,一拖再拖。到了最近放假了,才得空下笔。 想写年终总结的想法起源于去年的这个时候,也就是2024年的一月份左右。 那时我如往常一样打开收藏的大佬们的博客,映入眼帘的便是…

AI正在悄悄接管互联网:超过半数内容已是 AI 生成!

序言:这个世界任何时候都会因为利益冲突而变得精彩,人工智能写作是不是一种侵权行为,美国人内部闹得很欢,人工智能对人类的模仿到底算不算侵权? 如果法律裁定这种行为就是侵权,那也将是划时代的,因为:模仿不付费将会犯罪,那这个世界会不会就因此停滞发展呢?因为人类的…

【模拟电子技术】04-二极管的直流等效电路

【模拟电子技术】04-二极管的直流等效电路 上节提到PN结形成到二极管,并且了解到二极管V-A特性曲线每一段都能利用,并且可以规定电流路径。使用二极管的时候需要关注它的主要参数这四个参数中的每一个在使用的时候都需要考虑,如果没有选择好规格的话,使用时就可能烧坏。不难…

详解GaussDB事务和并发控制机制,提升事务并发处理效率

本文着重介绍了GaussDB的事务管理和并发控制机制,GaussDB采用多版本并发控制和两阶段锁相结合的机制。摘要:本文着重介绍了GaussDB的事务管理和并发控制机制,GaussDB采用多版本并发控制和两阶段锁相结合的机制。本文分享自华为云社区《华为云开发者云主机体验【玩转华为云】…

php NFA灾难回溯

php NFA灾难回溯正则分为NFA和DFA两种,而php中使用的是NFA.php通过pcre.backtrack_limit来限制回溯次数,如果超过了这个限制,就会返回false.pcre.backtrack_limit默认值是100万. 因此我们可以通过传入大量的垃圾字符或是触发灾难性回溯来超过限制,从而绕过preg_match. 除此以外…

如何构建适合MCN团队的文档管理系统

一、MCN团队运营中的文档管理痛点 每到年末,MCN团队都会面临一场“信息战”。团队成员需要汇总全年合作数据、内容产出情况、以及运营数据报表。这些繁重的任务中,文档管理是最基础但也最容易被忽视的一环。 痛点包括:文件分布零散:不同项目成员习惯使用不同的存储方式,难…

CDS标准视图:一次性账户的客户行项目 I_ONETIMEACCOUNTCUSTOMER

视图名称:一次性账户的客户行项目 视图类型:基础 视图代码:点击查看代码 @EndUserText.label: One-Time Account Data for Customer Items @Analytics: { dataCategory:#DIMENSION} @Analytics.internalName:#LOCAL @VDM.viewType: #BASIC @AbapCatalog.sqlViewName: IONETI…

学习笔记(五十一):onAreaChange 组件区域变化监听

onAreaChange(event: (oldValue: Area, newValue: Area) => void): T 组件区域变化时触发该回调。仅会响应由布局变化所导致的组件大小、位置发生变化时的回调。 由绘制变化所导致的渲染属性变化不会响应回调,如translate、offset。若组件自身位置由绘制变化决定也不会响应…

mysql-sql统计数据sql整理

一、查询SQLSELECTt1.规则编号 AS 编码,t1.规则描述 AS 名称,SUM( CASE WHEN t3.DATA_SOURCES = 00 THEN 1 ELSE 0 END ) AS 类型01,SUM( CASE WHEN t3.DATA_SOURCES = 01 THEN 1 ELSE 0 END ) AS 类型02,SUM( CASE WHEN t3.DATA_SOURCES = 02 THEN 1 ELSE 0 END ) AS 类型03,S…