E. Anonymity Is Important
题目链接:
E. Anonymity Is Important
题意
给出n个人和q次操作。
0 l r x
1 x
当操作类型为0的时候,x=1表示[l,r]内至少有一个病人,x=0表示[l,r]内没有病人
当询问类型为1的时候,给出当前人x有病/无病/不确定的判断。
思路
一开始将1-n插入set中,当某区间内病人个数为0时,从set中将这段区间内的编号都删除。
(二分查找s中第一个大于等于l的值,然后顺序删除直至值大于r)
用map保存至少有一个病人的区间,mp[l]=r表明[l,r]内至少有一个病人。
对每次要新插入的[l,r],如果map中之前已经存在[l',r'],而[l,r]包含[l',r'],则[l,r]为无效信息,因为[l',r']内至少有一个病人了,[l,r]除[l',r']的部分依旧不能确定有没有病人,这个信息等价于没有。
同样地,如果而[l',r']包含[l,r],则要删除map中所有的[l',r']区间。
对于查询,若x不在set中说明x肯定没有病,否则的话,在set中找到x的位置,并得到其前一个和后一个不能确定是否有病的人的编号记为lp和rp,在map中查询第一个左端点大于lp的区间(不会说有某个区间[l,r]满足l>lp并且r<rp,因为set中这段区间里的人都被删掉了,不可能说这段区间至少有一个病人,否则矛盾,所以r是一定大于x的),如果x在这个区间内而rp不在这个区间内,说明x肯定患病,否则的话不能确定x是否有病,输出'N/A'。
样例
代码
#include <bits/stdc++.h> using namespace std;set<int> s;
map<int,int> mp;int n,q;
int main(){scanf("%d%d",&n,&q);for(int i=0;i<=n+1;i++)s.insert(i);int op,l,r,x;while(q--){scanf("%d",&op);if(op==0){scanf("%d%d%d",&l,&r,&x);if(x==0){while(1){auto iter=s.lower_bound(l);if(iter==s.end()||*iter>r)break;elses.erase(iter);} }else{auto iter=mp.lower_bound(l);//新给的区间[l,r]如果覆盖map里之间存的某个区间//这个区间就没有意义 if(iter!=mp.end()&&iter->second<=r){continue;}mp[l]=r;iter=mp.find(l);while(iter!=mp.begin()&&prev(iter)->second>=r)mp.erase(prev(iter));}}else{scanf("%d",&x);if(!s.count(x)){printf("NO\n"); }else{auto iter=s.find(x);int l=*prev(iter),r=*next(iter);//0和n+1为什么要插入就在这里体现//当set中x为第一个元素时,*prev(iter)就为0,大于0的区间就可以auto it=mp.upper_bound(l);if(it!=mp.end()&&it->first<=x&&it->second<r){printf("YES\n");}else{printf("N/A\n");}}}}}
E. Anonymity Is Important相关推荐
- codeforces E. Anonymity Is Important 【推断题(线段树|STL)】
E. Anonymity Is Important [推断题(线段树|STL)] 题目 题意 给出若干次询问,当询问类型为1的时候,给出当前病人有病/无病/不确定的判断. 首先可以想到用set存储[不 ...
- CF773 E - Anonymity Is Important(stl迭代器的各种用法)
E - Anonymity Is Important 分析: 区间覆盖,set去重,剔除无效信息 输出有三种情况: NO:最好处理,在之前被删除过 YES:对于当前x,它前面一个,后面一个不与它共有一 ...
- CF 1642 E. Anonymity Is Important 线段树 + 离线
文章目录 题意 思路 传送门 题意 有nnn个人,给你qqq个请求,分以下三种: [l,r,x][l,r,x][l,r,x] 如果x=0x=0x=0,代表[l,r][l,r][l,r]这个区间内的人都 ...
- codeforces 1641C Anonymity Is Important (思维好题,STL)
题意: 有 n 个人和 q 个信息, 0 l r x,如果 x = 0,表示编号 l 到 r 的人没有病:否则,表示编号 l 到 r 的人至少有一个得病. 1 x,询问编号为 x 的人健康情况. 思路 ...
- 【CF1641C】Anonymity Is Important(STL,模拟(?))
题面
- Modifying Firefox for Anonymity
原文地址:http://schoolofprivacy.eu/post/23787421556/modifying-firefox-for-anonymity Firefox is one of th ...
- Why Sleeping May Be More Important Than Studying
Why Sleeping May Be More Important Than Studying 转载于:https://www.cnblogs.com/Lamfai/p/10441451.html
- Webinar: An introduction to PacBio’s long-read sequencing how it has been used to make important s
Webinar: An introduction to PacBio's long-read sequencing & how it has been used to make importa ...
- 用!important解决IE和Mozilla的布局差别(转)
http://www.w3cn.org/article/tips/2004/91.html 在设计<网页设计师>页面的时候,有一个问题一直困扰着我,主菜单在IE和其他(Mozilla.Op ...
最新文章
- %求余数 rand随机数
- 树(5)-----判断两颗树一样或者一棵树是否是另外一颗的子树
- Django模型和数据库操作
- 新东方私有化背后的秘密
- IIS 发布的FTP提供下载时的转码问题
- 中标麒麟操作系统离线安装nginx
- 网络端口和端口扫描简介
- HTML5期末大作业:爱宠之家网站设计——蓝色版爱宠之家(5页) 致热爱动物网页设计作品 大学生爱宠专题网页设计作业模板 动物静态HTML网页模板下载
- css折叠样式(4)——div+css布局
- 成功必须靠自己去争取。
- DataV-数据-csv文件
- Flink On K8s
- 和小朋友分享一些Scratch学习的心得一
- android发送电子邮件,Android发送电子邮件
- 25-30K ☀️|网络工程师职业技巧与经典面试题✨
- 《Python编程从入门到实践 第二版》第十八章练习
- 文件上传,服务器文件名中文乱码
- 智慧大厅综合管理平台 解决方案
- Ancient Berland Circus
- 【MATLAB】读取序列图像raw文件并求序列均值
热门文章
- 类的成员变量: 猜数字游戏:一个类A有一个成员变量v,有一个初值100。定义一个类,对A类的成员变量v进行猜。如果大了则提示大了,小了则提示小了。等于则提示猜测成功。
- 数据湖(十七):Flink与Iceberg整合DataStream API操作
- matlab从excel读取数据,使用Matlab从Excel中读取数据并实现回归统计计算
- 2021年压力容器作业(R)移动式压力容器充装(R2)考试题库
- PHP 单选 多选的统计,使用单选按钮和多选按钮,制作带自动统计功能的调查问卷(一)...
- UGUI深度学习(二)-- 浅谈特效穿层问题
- 《王者荣耀》西施调整 9月7日体验服停机更新公告
- 学web前端开发和学习其他编程语言一样吗?
- 如何基于10米等高线生成TIN
- php v9 sql,PHPCMS v9 SQL注入