杂题选记(10.26 - 11.1)

news/2025/11/5 11:39:01/文章来源:https://www.cnblogs.com/Hengqwq/p/19180450

P12029 [USACO25OPEN] Election Queries G

\(c_i\) 为投票给 \(i\) 的人数。那么两头奶牛 \(x\)\(y\) 能成为领队的条件是 \(c_x + c_y \ge c_max\),其中 \(c_max = \max{c_i}\)
考虑单次查询,用双指针可以轻松地做到 \(O(n)\),二分带个 \(\log\) 也可以接受的。
卡在了一个重要结论,由于 \(\sum{c_i} = n\),那么不同的 \(c_i\) 的取值最多有 \(O(\sqrt{n})\)\(1 + 2 + \cdots + n = \frac{n(n + 1)}{2}\))。
那么我们开 \(N\)\(set\) 记录 \(c_x = i\) 中最小/最大的 \(x\),然后每次对还存在的 \(c_i\) 做一遍尺取就好了。
复杂度 \(O(Q{\log{N} + \sqrt{N}})\)

Code
#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 5;
set<int> s, mn[N];
set<int, greater<int> > mx[N];
int c[N], a[N], n, q;
void upd(int x, int k){if(c[x]){mx[c[x]].erase(x), mn[c[x]].erase(x);if(mx[c[x]].empty()) s.erase(c[x]);}c[x] += k;if(c[x]){mx[c[x]].insert(x), mn[c[x]].insert(x);if(mx[c[x]].size() == 1) s.insert(c[x]);}
}
int qry(){auto l = s.begin(), r = s.end();int mny = 1e9, cmax = *s.rbegin(), ans = 0;
//	cout << cmax << '\n';while(l != s.end()){while(r != s.begin() && *prev(r) + *l >= cmax) --r, mny = min(mny, *mn[*r].begin());ans = max(ans, *mx[*l].begin() - mny);++l;}return ans;
}
int main(){cin.tie(nullptr)->sync_with_stdio(0);cin >> n >> q;for(int i = 1; i <= n; ++i) cin >> a[i], c[a[i]]++;for(int i = 1; i <= n; ++i){if(c[i]) s.insert(c[i]), mx[c[i]].insert(i), mn[c[i]].insert(i);}while(q--){int x, k;cin >> x >> k;upd(a[x], -1);a[x] = k;upd(a[x], 1);cout << qry() << '\n';}return 0;
}

P12030 [USACO25OPEN] OohMoo Milk G

怎么说呢,感觉这题很玄乎。
可以发现,Fj 每天的操作就是对最大的 \(A\) 个数 + 1,然后 Nj 的操作就是对最大的 \(B\) 个数 - 1。
我们发现 Fj 每天加的那 \(A\) 个数总是固定的,就是原序列中最大的 \(A\) 个数。那么现在难点在于 Nj 的操作。
先考虑对前 \(A\) 大的数全部加 \(D\)。对于一些特别大的数,Nj 每次操作都会选择减他们,相当于这些数占用了一些固定的位置。但对于一些更小的数来说,我们要最小化 \(\sum x^{2}\),根据凸性/均值,让他们更加平均是更优的。那么就类似云浅那场的 T2。我们考虑二分这个平均值 \(k\),对于 \(a_i > k + D\) 的,这就是那些每次都必须减的数,会耗费 \(D\) 个操作次数。而对于其他的 \(a_i > k\),我们会耗费 \(a_i - k\) 的操作次数把他们全部都调成这个平均值 \(k\)。由于题目限制总共操作次数不得超过 \(B \times D\)。我们找到最大的 \(k\) 使得操作次数刚好 \(\ge B \times D\)。假设 \(k\) 时耗费的次数是 \(check(k)\),根据上面调整的过程,不难发现我们二分出的这个 \(k\),它的 \(check(k) - B \times D < B\)。之所以会有这些超的,是因为整数均值就是一些是 \(k\),一些是 \(k + 1\)。那么我们把多的那部分再调成 \(k + 1\) 即可。

Code
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 2e5 + 5, mod = 1e9 + 7;
int n, d, a, b, m[N];
int check(int k){int cnt = 0;for(int i = 1; i <= a; ++i){if(m[i] > k) cnt += min(d, m[i] - k);}return cnt;
}
signed main(){ cin.tie(nullptr)->sync_with_stdio(0);cin >> n >> d >> a >> b;for(int i = 1; i <= n; ++i) cin >> m[i];sort(m + 1, m + 1 + n, greater<int>());for(int i = 1; i <= a; ++i) m[i] += d;int l = 1, r = 2e9;while(l < r){int mid = (l + r + 1) >> 1;if(check(mid) < b * d) r = mid - 1;else l = mid;}int k = check(l) - b * d, ans = 0;for(int i = 1; i <= n; ++i){if(m[i] > l) m[i] -= min(d, m[i] - l);(ans += m[i] * m[i]) %= mod; }(ans += k * (2 * l + 1)) %= mod;cout << ans;return 0;
}

CF2150B Grid Counting

卡在了怎么处理 \(\max(x_i, y_i) = k\) 的条件上。事实上,可以把每个点的 \(\max(x_i, y_i)\) 画出来,发现是从左上角一圈一圈递增;同理,\(\max(x_i, n - y_i + 1)\) 是从右上角一圈一圈递增。稍微找一下规律,可以发现最终能涂色的那一部分是一个倒三角状物,那么再根据 \(a_i\) 的限制从下往上填算方案就好。

Code
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 2e5 + 5, mod = 998244353;
ll a[N], n, k, fac[N], ifac[N], inv[N];
ll C(int n, int m){if(m > n || n < 0) return 0;return fac[n] * ifac[m] % mod * ifac[n - m] % mod;}
void solve(){cin >> n;k = 0;for(int i = 1; i <= n; ++i) cin >> a[i], k += a[i];if(k != n || a[1] < 2) cout << 0 << '\n';else{ll ans = 1, cnt = 0;for(int i = (n + 1) / 2; i >= 1; --i){ans = (ans * C(n - 2 * (i - 1) - cnt, a[i])) % mod;cnt += a[i];}for(int i = (n + 1) / 2 + 1; i <= n; ++i){if(a[i] != 0){ ans = 0; break; }}cout << ans << '\n';}
}
int main(){cin.tie(nullptr)->sync_with_stdio(0);fac[0] = fac[1] = ifac[0] = ifac[1] = inv[1] = 1;for(int i = 2; i <= 2e5; ++i){fac[i] = (fac[i - 1] * i) % mod;inv[i] = ((mod - mod / i) * inv[mod % i]) % mod;ifac[i] = (ifac[i - 1] * inv[i]) % mod;}int T; cin >> T;while(T--) solve();return 0;
}

CF2150C Limited Edition Shop

推等价条件:记 \(i\)\(b_i\) 中出现的位置是 \(pos_i\),那么 Alice 能从她喜爱的物品中选出一个子集 \(S\) 的条件是 \(\forall a_i \notin S, a_j \in S, i < j, pos_{a_i} < pos_{a_j}\)
考虑 dp,\(f_{i, j}\) 表示 Alice 选到前 \(i\) 个物品,之前没选的物品中最大的 \(pos_{a_k}(k \le i) = j\) 的最大值。
\(\begin{cases} f_{i + 1, j} \gets f_{i, j} + v_{a_i + 1} & j < pos_{a_i + 1} \\ f_{i + 1, j} \gets \max_{k < j}{f_{i, k}} & j = pos_{a_i + 1} \\ f_{i + 1, j} \gets f_{i, j} & j > pos_{a_i + 1} \\ \end{cases}\)
考虑线段树直接维护 \(f_j\)。从 \(i \to i + 1\) 时,发现 \(f_j\) 的转移是一段区间加,一次区间查最大值,和一次单点修改。

Code
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 2e5 + 5, inf = 1e18;
int n, v[N], a[N], b[N], pos[N], tag[N << 2], tr[N << 2];
#define ls(p) p << 1
#define rs(p) p << 1 | 1
void pushup(int p){ tr[p] = max(tr[ls(p)], tr[rs(p)]); }
void addtag(int p, int k){ tag[p] += k, tr[p] += k; }
void pushdown(int p){ if(tag[p]) addtag(ls(p), tag[p]), addtag(rs(p), tag[p]), tag[p] = 0; }
void add(int L, int R, int k, int p = 1, int pl = 0, int pr = n){if(L <= pl && R >= pr) return addtag(p, k);int mid = (pl + pr) >> 1;pushdown(p);if(L <= mid) add(L, R, k, ls(p), pl, mid);if(R > mid) add(L, R, k, rs(p), mid + 1, pr);pushup(p); 
}
void upd(int x, int k, int p = 1, int pl = 0, int pr = n){if(pl == pr) return tr[p] = k, void();int mid = (pl + pr) >> 1;pushdown(p);if(x <= mid) upd(x, k, ls(p), pl, mid);else upd(x, k, rs(p), mid + 1, pr);pushup(p);
}
int query(int L, int R, int p = 1, int pl = 0, int pr = n){if(L <= pl && R >= pr) return tr[p];int mid = (pl + pr) >> 1, ret = -inf;pushdown(p);if(L <= mid) ret = query(L, R, ls(p), pl, mid);if(R > mid) ret = max(ret, query(L, R, rs(p), mid + 1, pr));return ret; 
}
void clear(int p = 1, int pl = 0, int pr = n){tag[p] = tr[p] = 0;if(pl == pr) return;int mid = (pl + pr) >> 1;clear(ls(p), pl, mid), clear(rs(p), mid + 1, pr);
}
void solve(){cin >> n;clear();for(int i = 1; i <= n; ++i) cin >> v[i];for(int i = 1; i <= n; ++i) cin >> a[i];for(int i = 1; i <= n; ++i) cin >> b[i], pos[b[i]] = i;upd(0, v[a[1]]);if(1 < pos[a[1]]) add(1, pos[a[1]] - 1, -inf);if(pos[a[1]] < n) add(pos[a[1]] + 1, n, -inf);for(int i = 2; i <= n; ++i){int mx = query(0, pos[a[i]]);add(0, pos[a[i]] - 1, v[a[i]]); // chosen upd(pos[a[i]], mx); // unchosen}cout << tr[1] << '\n'; 
}
signed main(){cin.tie(nullptr)->sync_with_stdio(0);int T; cin >> T;while(T--) solve();return 0;
}

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

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

相关文章

P3953 [NOIP 2017 提高组] 逛公园 题解

P3953 [NOIP 2017 提高组] 逛公园 题解P3953 [NOIP 2017 提高组] 逛公园 题解 题目传送门 我的博客 前言 笔者的做法是最短路+记忆化搜索+DP,目前没有写完其他做法。 思路 拿到这道题后笔者第一个想法是跑一个Dijkstr…

用“引用名”替代“变量名”来描述指向对象的标识,更为准确!

在Python等面向对象编程语言中,用“引用名”替代“变量名”来描述指向对象的标识,在逻辑上更准确,尤其当讨论对象、类、内存地址等概念时。这背后的核心原因是“变量”和“引用”的本质区别: 1. 传统“变量名”的局…

2025 年最新推荐开沟机供应厂家榜单:覆盖多机型实力厂商口碑推荐及选购指南梯形槽 / 自走式手扶 / 轮式 / 农用开沟机公司推荐

引言 随着基建与农林产业快速发展,地下管道铺设、农田灌溉等工程对开沟机的需求持续增长,然而市场供需匹配难题凸显,用户选购时面临诸多困扰。为此,行业权威协会开展开沟机厂商专项测评,测评涵盖近百家国内厂商,…

2025年11月长途旅行行李箱品牌十大选择榜:权威榜单与数据佐证推荐

拖着箱子赶红眼航班、在异国的石板路上颠簸、机场传送带旁焦急辨认行李——这些场景让“一只靠谱的长途旅行行李箱”成为高频刚需。2025年出境游与长线国内游人次已恢复至2019年的108%,交通运输部数据指出,全年航空旅…

2025 年镀锌卷板厂家最新推荐排行榜:聚焦实力企业,揭秘定制化服务优势及优质产品选购方向无花镀锌卷板 / 高锌层镀锌卷板 / 批发镀锌卷板公司推荐

引言 在工业制造与建筑建材领域,镀锌卷板作为基础防腐材料,其品质直接影响终端产品的使用寿命与安全性能。近期,行业协会开展镀锌卷板厂家综合测评,覆盖产品性能、技术实力、服务能力等核心维度,测评样本量达百余…

2025年11月长途旅行行李箱十大品牌选择榜:知名主流参数全解析

出门七天以上,箱子先坏还是人先累?这是长途旅行者最怕遇到的尴尬:轮子掉胶、拉杆卡死、箱体开裂,机场托运带前一片狼藉。2024年民航局发布的数据显示,国内航线全年行李差错率虽降至万分之三点七,但旅客关于行李箱…

2025.11 做题记录

P3412 仓鼠找sugar II solution 先把题意转化成,求对于所有 \(a,b\) 的情况,从 \(a\) 走到 \(b\) 的期望步数和。 对于这个东西,把每条边的贡献拆出来。答案即 \(\sum 每条边的经过次数 \times 走过每条边的期望步数…

2025 年 11 月外墙仿石漆厂家推荐排行榜,真石漆,水包砂,质感涂料,仿石涂料优质品牌公司推荐

2025年11月外墙仿石漆厂家推荐排行榜:真石漆、水包砂、质感涂料、仿石涂料优质品牌公司深度解析 在建筑外墙装饰领域,仿石漆凭借其优异的装饰效果和实用性能,已成为现代建筑外墙装饰的主流选择之一。随着技术的不断…

2025 年 11 月耐污仿石漆厂家推荐排行榜,外墙耐污仿石漆,墙面耐污仿石漆,建筑涂料耐污仿石漆公司推荐

2025 年 11 月耐污仿石漆厂家推荐排行榜 随着建筑行业对装饰材料性能要求的不断提升,耐污仿石漆凭借其卓越的耐候性、自洁功能和逼真的石材效果,已成为外墙装饰领域的主流选择。为帮助行业用户筛选优质耐污仿石漆品牌…

2025 年 11 月水包水仿石漆厂家推荐排行榜,外墙水包水仿石漆,多彩水包水仿石漆,质感水包水仿石漆公司推荐

2025年11月水包水仿石漆厂家推荐排行榜 行业背景与发展现状 水包水仿石漆作为建筑外墙装饰材料的重要组成部分,近年来在建筑行业中的应用日益广泛。这种新型涂料以其卓越的仿真效果、优异的耐候性能和环保特性,逐渐取…

2025年11月轻便行李箱品牌十大排行榜:全维度解析与避坑建议

拖着箱子赶高铁、在机场一路小跑、换乘地铁还得抬上台阶——这些场景让“轻便”成为行李箱的第一刚需。2025年国内出行人次已恢复至2019年的112%,轻量化箱体销量同比再增18%,但市场同时出现“克重虚标”“轮子掉色”…

2025 年 11 月防霉仿石漆厂家推荐排行榜,外墙防霉仿石漆,室内防霉仿石漆,水性防霉仿石漆,高效防霉仿石漆公司推荐

2025年11月防霉仿石漆厂家推荐排行榜 行业背景与发展现状 随着建筑行业对装饰材料性能要求的不断提升,防霉仿石漆作为新型环保建筑涂料,在建筑外墙和室内装饰领域展现出广阔的应用前景。这种材料不仅能够完美复刻天然…

移动应用APP开发搭建自动化测试框架经验分享

光靠一招不行,得从人、流程、工具、组织四个维度系统推进。大家好,我是陈哥。 今天,我邀请了禅道专栏作者刘军,和我们分享一下移动应用APP开发如何搭建自动化测试框架。 希望通过这些实操经验能给大家带来新的启发…

2025年11月大容量行李箱品牌十大对比榜:知名型号数据化评测

拖着28寸箱子赶红眼航班、在高铁站台阶上被轮子噪音吵醒旁人、返程时发现箱体被摔裂——这些场景让“大容量”不再只是升数游戏,而是对结构强度、静音系统、售后网络的综合考验。中国民航局2024年公报显示,国内航司全…

React系列教程:7. 条件渲染

方式一 let content; if (isLoggedIn) {content = <AdminPanel />; } else {content = <LoginForm />; } return (<div>{content}</div> );方式二 <div>{isLoggedIn ? (<AdminPanel…

基于MATLAB的FY-3B MWRI数据处理

1. 数据读取与结构解析 FY-3B MWRI数据采用HDF5格式存储,需通过MATLAB的HDF5接口读取核心参数: % 读取HDF5文件元数据 fileInfo = hdf5info(FY3B_MWRI_L1_20230101_0000.HDF);% 提取关键数据集 brightnessTemp = hdf…

2025年11月大容量行李箱品牌十大口碑榜:排行榜与选择方案

拖着28寸箱子赶高铁、在机场柜台前为超重挠头、出站时轮子掉渣——这些场景让“大容量行李箱”成为双十一搜索热词。2025年国内出游人次已恢复至2019年的118%,长途求学、跨境差旅、全家自驾露营三类场景集中爆发,用户…

2025年11月闸阀厂家排名:十强资质对比与项目适配评价

闸阀是工业管线中“开与关”的最后一道保险,用户通常面临三大场景:新建大型石化装置需要高密封等级的大口径闸阀;市政供水改造要求长寿命、低扭矩的弹性座封闸阀;预算有限的中小型工厂希望以合理价格拿到符合国标的…

2025年能注册公司代办的公司哪家好?

2025年,随着经济活力的持续释放,大量创业团队涌入市场,中小微企业的注册需求呈现爆发式增长。然而,企业注册涉及核名、地址、材料提交等多个环节,流程繁琐且对专业性要求较高,很多初创者因缺乏经验屡屡碰壁。同时…

【权威发布】国产设备采购必看!工信部安全可靠测评最新结果汇总(附指南).v2.251105

导语: 为保障关键信息基础设施安全,国产设备采购需符合工信部《安全可靠测评工作指南(V3.0)》要求。本文汇总了2023年至2025年最新测评结果公告,助您快速掌握合规设备清单!一、安全可靠测评政策依据 根据工信部发…