题意:
有 n 个人和 q 个信息,

  • 0 l r x,如果 x = 0,表示编号 l 到 r 的人没有病;否则,表示编号 l 到 r 的人至少有一个得病。
  • 1 x,询问编号为 x 的人健康情况。

思路:
模拟即可。
首先, n 个人最初的健康情况都是未知的。
如何确定一个人的健康情况:一种方法是直接告知一个人没病;另一种方法 x 在至少一个人得病的区间内,并且只有 x 的情况未知,其他人都没得病。

假设知道 [3, 6] 这个区间内至少一个人得病,且知道 [2, 4] 和 [6, 8] 没人得病,即 1 0 0 0 5 0 0 0 9 10,可以确定 5 一定是得病的人。

显然,不断缩小至少有一个人得病的区间就可以比较优的找到谁得病了。
比如,同时知道 [3, 10] 和 [4, 6] 两个区间内至少有一个人得病,这时是无法确定 [3, 4] 和 [8, 10] 这两个区间内的情况,但 [4, 6] 内至少有一个人得病。

综上,需要维护两个信息:不能确定健康情况的人和至少有一人得病的区间。

不能确定健康情况的人涉及到动态删除(删除没得病的人),使用 set 维护(二分找人,erase删除编号)。set 的 erase 函数的时间复杂度是摊销常数,而 vector的时间复杂度是 O(n)。
至少有一人得病的区间涉及到区间嵌套问题,使用 map 维护。键作为左端点,值作为右端点。map 内部按照键排序,即按照左端点排序。比较相邻区间的右端点就可以得到嵌套关系。

具体操作看代码解释。

ACcode

#include <bits/stdc++.h>
#define ll long long
#define endl "\n"
const double eps = 1e-8;
const ll INF=0x3f3f3f3f;
const ll mod=998244353;
const int maxn = 2e5 + 5;
using namespace std;
#define PI acos(-1)
#define ld long double
#define IOS     cin.tie(0), ios::sync_with_stdio(false)set<int> v;
map<int, int> s;int main(){IOS;int n, q;cin >> n >> q;// 初始不确定健康情况的人for(int i = 0; i <= n+1; i++) v.insert(i);int op, l, r, x;while(q--){cin >> op;if(op == 0){cin >> l >> r >> x;if(x == 0){while(1){ // 删除 [l, r] 之间的人auto it = v.lower_bound(l);if(*it > r) break;v.erase(it);}}else{// 如果存在区间 a,b 被区间 l,r 包含,则不用进行操作auto it = s.lower_bound(l);if(it != s.end() && it->second <= r) continue;// 否则,缩小区间 s[l] = r;// 查询前一个区间是否包含当前区间,如果包含则删除前一个区间it = s.find(l);while(it != s.begin() && r <= prev(it)->second) s.erase(prev(it));}}else{cin >> x;if(!v.count(x)) cout << "NO" << endl; // 被删除说明没病else{// 如果 x 在至少一个人得病的区间内,并且只有 x 的情况未知。int l = *prev(v.find(x));int r = *next(v.find(x));auto it = s.upper_bound(l);if(it != s.end() && it->first <= x && it->second < r) cout << "YES" << endl;else cout << "N/A" << endl;}}}return 0;
}

codeforces 1641C Anonymity Is Important (思维好题,STL)相关推荐

  1. codeforces E. Anonymity Is Important 【推断题(线段树|STL)】

    E. Anonymity Is Important [推断题(线段树|STL)] 题目 题意 给出若干次询问,当询问类型为1的时候,给出当前病人有病/无病/不确定的判断. 首先可以想到用set存储[不 ...

  2. 【CodeForces - 707B】Bakery(思维水题)

    Bakery Descriptions 玛莎想在从1到n的n个城市中开一家自己的面包店,在其中一个城市烘焙松饼. 为了在她的面包房烘焙松饼,玛莎需要从一些储存的地方建立面粉供应.只有k个仓库,位于不同 ...

  3. 【CodeForces - 1038A 】Equality (思维水题,预处理字符串)

    题干: You are given a string ss of length nn, which consists only of the first kk letters of the Latin ...

  4. Codeforces 1077B Disturbed People(思维题)

    Codeforces 1077B Disturbed People(思维题) There is a house with nn flats situated on the main street of ...

  5. codeforces 1060a(思维水题)

    Let's call a string a phone number if it has length 11 and fits the pattern "8xxxxxxxxxx", ...

  6. python list长度_python的入门阶段 编程思维100题 我跟罗志祥没关系

    """python的入门阶段 编程思维100题(适合学习了1周--1个月的新人) 第五题:我跟罗志祥没关系 朋友圈大家每天都看,那用python如何实现它那? 很简单,朋 ...

  7. Codeforces Round #701 (Div. 2)赛后补题报告(A~D)

    Codeforces Round #701 (Div. 2)赛后补题报告(A~D) A. Add and Divide 原题信息 http://codeforces.com/contest/1485/ ...

  8. php编程数学思维题,一年级数学:思维训练题(13套),打印每周一练,益智提升专用...

    一年级数学:思维训练题(13套),打印每周一练,益智提升专用! 众所周知,思维对于数学的学习是最为关键的,尤其是在小学阶段,需要趁早的培养孩子的逻辑思维能力.思维不是凭空想象,而是要依据手里的题目,能 ...

  9. c语言编程思维训练方法,编程思维训练题.pdf

    编程思维训练题 编程思维训练一 (学会用 C 语言运算符来表达你的想法) 用 C 表达式来表达下面的题目,比如判断一个整数 a 是不是等于 9,对应的表 达式为 a 9. 数学运算 1. 将数学表达式 ...

最新文章

  1. 【怎样写代码】实现对象的复用 -- 享元模式(二):解决方案
  2. chrome 播放视频提示 adobe flash player已过期或者adobe flash player 没有安装
  3. 数据库面试题【十一、InnoDB引擎的4大特性】
  4. 面试官:Spring为什么建议使用构造器来注入?
  5. win10切第二屏幕_Win10特有的31个快捷键,装逼利器,赶快收藏吧!学习电脑知识...
  6. 【软件开发综合实验】文本压缩软件
  7. DROP TABLE ** CASCADE CONSTRAINTS PURGE删除表的时候级联删除从表外键
  8. 简单的java信息显示_JSP实现简单的用户登录并显示出用户信息的方法
  9. Cocos2Dx之处理键盘输入
  10. XSS的基本概念和原理
  11. 超大数据量操作 java程序优化[转载]
  12. 正则表达式基础---转自 Python正则表达式指南 前边
  13. 学计算机的思维导图,电脑上最好用的6款,思维导图软件测评
  14. linux双系统无u盘安装教程视频教程,window 与Linux Mint 双系统U盘安装方法
  15. 五、原型模式(Prototype Pattern)
  16. 一位俄罗斯程序员移民美国的故事
  17. supersqli(SQL注入流程及常用SQL语句)
  18. [git报错] fatal: reference is not a tree: xxx 以及 Unable to checkout ‘xxx‘ in submodule path xxx
  19. java验证文件的完整性_JAVA中进行数据完整性验证
  20. VSCode配置MPX开发

热门文章

  1. 跨境电商,50+爆款案例,揭示独立站选品7大逻辑
  2. cadence SPB17.4 - orcad - Hanging Wires规则的验证实验
  3. 【Windows8系统与Win7的区别】
  4. netty基础知识2
  5. 沙箱的UI小工具——轻量级虚拟系统
  6. 业内Chromium115内核首发|海泰红莲花国密浏览器极速版V10
  7. 针对图谱超级节点的一种优化解决方案
  8. Google 13周年纪 – Google 11年收购历程
  9. 伺服电机:说明类型和工作原理。
  10. 理解最大期望算法EM的三层境界(1)