当前位置: 首页 > ds >正文

【codeforces思维题】前缀和的巧妙应用(2053B)

【CF思维题】前缀和的巧妙应用(2053B)

Problem - 2053B - Codeforces

给定 n n n个印象,每个印象对应一个区间,印象可以是该区间中任意一个数字。假设第 i ( 1 ≤ i ≤ n ) i(1 \leq i \leq n) i(1in)个印象选择的数字是 n u m i num_i numi,当且仅当对于所有 j ( 1 ≤ j ≤ n & & j ≠ i ) j(1 \leq j \leq n \ \&\&\ j \neq i) j(1jn && j=i),都有 n u m j ≠ n u m i num_j \neq num_i numj=numi,可以认为第 i i i个印象是唯一的。考虑所有印象,若该印象可以是唯一的,输出 1 1 1否则输出 0 0 0

解法:

  • 对于每一个 1 ≤ i ≤ n 1 \leq i \leq n 1in ,对于每个 l i ≤ x ≤ r i l_i \leq x \leq r_i lixri ,我们要检查每个印象在 x x x处是否唯一。注意,对于每个 j ≠ i j \neq i j=i ,若 l j ≠ r j l_j \neq r_j lj=rj ,我们总是可以将 w j w_j wj 换成不同的值。所以当且仅当存在一个 1 ≤ j ≤ n 1 \leq j \leq n 1jn j ≠ i j \neq i j=i ,使得 l j = r j = x l_j = r_j = x lj=rj=x ,这是不可能的。

  • 让我们将 a i a_i ai记录为满足 1 ≤ k ≤ n 1 \leq k \leq n 1kn l k = r k = i l_k = r_k = i lk=rk=i 时,不同 k k k 的数量。(这个很好统计,不妨用桶或 m a p map map 等统计 l k ( l k = r k ) l_k(l_k = r_k) lk(lk=rk) 这个数字的出现次数)。如果 l i ≠ r i l_i \neq r_i li=ri ,那我们说印象 i i i不能被唯一化当且仅当对于所有 l i ≤ k ≤ r i , a k ≥ 1 l_i \leq k \leq r_i,a_k \geq 1 likri,ak1 ;如果 l i = r i l_i = r_i li=ri,当且仅当 a l i ≥ 2 a_{l_i} \geq 2 ali2 时,它不能唯一化。

  • 以上内容可以在前缀和中快速检查。我们要在一个区间中检查该区间中所有数字是否都可以满足某个性质时,不妨将该数轴上的数字标记。若标记成 1 1 1,则满足;标记成 0 0 0,则不满足。随后求一遍前缀和。若 s u m [ r ] − s u m [ l − 1 ] = 0 sum[r] - sum[l - 1] = 0 sum[r]sum[l1]=0,证明了该区间的和是 0 0 0,意味着区间中任意一个数字都不满足该性质;反之,则说明该区间有数字可以满足该性质。

  • 考虑区间上问题时,不妨从前缀和角度思考问题。

#include <bits/stdc++.h>
using namespace std;typedef pair<int, int> pII;
#define x first
#define y secondvoid solve() {int n;cin >> n;vector<pII> segs;map<int, int> cnt;for (int i = 0; i < n; i ++) {int l, r;cin >> l >> r;segs.push_back({l, r});if (l == r) {cnt[r] ++;}}vector<int> f(2 * n + 10, 1);f[0] = 0;for (auto& [u, v] : cnt) {if (v >= 1) f[u] = 0;}for (int i = 1; i <= 2 * n; i ++) {f[i] += f[i - 1];}for (int i = 0; i < segs.size(); i ++) {int l = segs[i].x, r = segs[i].y;if (l == r) {if (cnt[r] == 1) cout << '1';else cout << '0';} else {if (f[r] - f[l - 1] == 0) cout << '0';else cout << '1';}}cout << endl;}int main() {int t;cin >> t;while (t --) {solve();}return 0;
}
http://www.xdnf.cn/news/1322.html

相关文章:

  • 【AI News | 20250422】每日AI进展
  • 计算机组成原理---总线系统的详细概述
  • HCIP-H12-821 核心知识梳理 (5)
  • 如何修改文件termsrv.dll实现多用户同时远程
  • 一个关于相对速度的假想的故事-4
  • AGI大模型(12):向量检索之关键字搜索
  • 企业战略到数字化落地 —— 第四章 SOP 的概念
  • 几种电气绝缘类型
  • Mininet--node.py源码解析
  • 学习笔记——《Java面向对象程序设计》-抽象和接口
  • 实验1python基本网络应用
  • 为TA开发人员介绍具有最新改进的Kinibi-610a
  • 【Vue3 / TypeScript】 项目兼容低版本浏览器的全面指南
  • 【MySQL】数据库基础
  • 从马拉松到格斗大赛:人形机器人撕开的万亿市场,正在改写AI规则
  • STM32单片机入门学习——第45节: [13-2] 修改频主睡眠模式停止模式待机模式
  • G1 人形机器人硬件构成与接口
  • 图像挖掘课程笔记-第一章:了解机器视觉
  • 【TeamFlow】4.3.2 细化时间单位
  • 设备预测性维护系统部署成本:技术架构与成本优化策略解析
  • Linux——基于socket编程实现简单的Tcp通信
  • Size of map written was 1, but number of entries written was 0. 异常分析
  • 进阶篇 第 7 篇 (终章):融会贯通 - 多变量、模型选择与未来之路
  • 数据可视化--数据探索性分析
  • 数据库MySQL学习——day1(创建表与数据类型)
  • win10中打开python的交互模式
  • Ubuntu 22.04安装IGH
  • CRM系统的功能有哪些?CRM系统功能指南
  • RenderDoc 使用介绍
  • STL C++详解——priority_queue的使用和模拟实现 堆的使用