Educational Codeforces Round 172 (Rated for Div. 2)(C-D)
1.Codeforces Round 958 (Div. 2)2.Codeforces Round 957 (Div. 3)3.Codeforces Round 959 sponsored by NEAR (Div. 1 + Div. 2)4.Codeforces Round 960 (Div. 2)5.AtCoder Beginner Contest 3636.Codeforces Round 961 (Div. 2)7.AtCoder Beginner Contest 3628.Codeforces Round 962 (Div. 3)9.Pinely Round 4 (Div. 1 + Div. 2)10.Educational Codeforces Round 168 (Rated for Div. 2)11.AtCoder Beginner Contest 36712.Codeforces Round 967 (Div. 2)13.Codeforces Round 968 (Div. 2)14.Educational Codeforces Round 173 (Rated for Div. 2)
15.Educational Codeforces Round 172 (Rated for Div. 2)(C-D)
16.Codeforces Round 998 (Div. 3)17.2025牛客寒假算法基础集训营218.2025牛客寒假算法基础集训营1题目链接:Dashboard - Educational Codeforces Round 172 (Rated for Div. 2) - Codeforces
C. Competitive Fishing
tag:后缀和 + 思维
Description:有一个序列含
Solution:在第
%% 1 4 4 0011 3 %% void solve(){ int n, k; string ss; cin >> n >> k >> ss; ss = '&' + ss; vector<int> a(n + 1), s(n + 2); for (int i = 1; i <= n; i ++){ if (ss[i] == '1') a[i] = 1; else a[i] = -1; } priority_queue<int> qu; for (int i = n; i > 1; i --){ // 后缀和 s[i] = s[i + 1] + a[i]; qu.push(s[i]); } int ans = 0, sum = 0; while (qu.size()){ sum += qu.top(); qu.pop(); ans ++; if (sum >= k){ cout << ans + 1 << endl; return; } } cout << -1 << endl; }
D. Recommendations
tag:思维
Description:给定n个区间[l,r],输入所有包含该区间的公共区间减去该区间的长度。1 <= n <= 2e15, 1 <= l <= r <= 1e9
。
Solution:区间问题考虑先排序再处理。用两个数组R[i],L[i],存储第i个区间对应的右边界和左边界。考虑如何求右边界。
- 显然需要按左端点从小到大排序,因为需要左边包含当前区间,同时右端点从大到小排序,让能包含的区间先出现。
- 左边界同理。
- 如果有两个区间相同特判为0。(用map记录)
trick:区间问题考虑先排序再处理,用set自带的st.lower_bound()比lower_bound函数快,但是前者返回的是迭代器。
struct node{ int l, r, id; }; bool cmp1(node a, node b){ // 左端点从小到大排序,右端点大在前,计算Ri if (a.l == b.l) return a.r > b.r; else return a.l < b.l; } bool cmp2(node a, node b){ if (a.r == b.r) return a.l < b.l; else return a.r > b.r; } void solve(){ int n; cin >> n; vector<node> a(n); vector<node> id(n); map<pii, int> mp; for (int i = 0; i < n; i ++){ cin >> a[i].l >> a[i].r; a[i].id = i; id[i] = a[i]; mp[{a[i].l, a[i].r}] ++; } vector<int> L(n), R(n); sort(a.begin(), a.end(), cmp1); set<int> st; for (int i = 0; i < n; i ++){ if (st.size() == 0){ R[a[i].id] = a[i].r; } else{ if (st.lower_bound(a[i].r) == st.end()){ R[a[i].id] = a[i].r; } else{ int xr = *(st.lower_bound(a[i].r)); R[a[i].id] = xr; } } st.insert(a[i].r); } st.clear(); sort(a.begin(), a.end(), cmp2); for (int i = 0; i < n; i ++){ if (st.size() == 0){ L[a[i].id] = a[i].l; } else{ if (st.lower_bound(-a[i].l) == st.end()){ L[a[i].id] = a[i].l; } else{ int xr = *(st.lower_bound(-a[i].l)); L[a[i].id] = -xr; } } st.insert(-a[i].l); } for (int i = 0; i < n; i ++){ if (mp[{id[i].l, id[i].r}] > 1){ cout << 0 << endl; } else cout << (R[i] - id[i].r) + (id[i].l - L[i]) << endl; } }
合集:
题解
标签:
Codeforces
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)