Hello 2020D(多重集)
如果有一对时间对在某一场馆有时间重合而这一对时间对在另一场馆没有时间重合,则输出NO,否则输出YES。
#define HAVE_STRUCT_TIMESPEC
#include<bits/stdc++.h>
using namespace std;
vector<pair<pair<int,int>,pair<int,int> > >v1,v2;
int check(const vector<pair<pair<int,int>,pair<int,int> > >&v){//常引用,既提高了效率,也不会让参数在函数中被改动
multiset<int>l,r;//保留了某一场馆时间重合的场次下另一场馆的时间对。
for(int i=;i<v.size();++i){
pair<pair<int,int>,pair<int,int> >it=v[i];
pair<int,int>temp=it.first;
pair<int,int>temp2=it.second;
if(temp.second==){
l.erase(l.find(temp2.first));
r.erase(r.find(temp2.second));
}
else{
multiset<int>::iterator x=r.lower_bound(temp2.first);
if(x!=r.begin())//如果有比当前开始时间更小的结束时间,说明这一场馆可以有一对没有时间重合的时间对且另一场馆这一对时间重合。
return ;
multiset<int>::iterator y=l.upper_bound(temp2.second);
if(y!=l.end())//如果有比当前结束时间更大的开始时间,说明这一场馆可以有一对没有时间重合的时间对且另一场馆这一对时间重合。
return ;
l.insert(temp2.first);
r.insert(temp2.second);
}
}
return ;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int n;
cin>>n;
int a,b,c,d;
for(int i=;i<=n;++i){
cin>>a>>b>>c>>d;
v1.push_back(make_pair(make_pair(a,-),make_pair(c,d)));//相同的开始时间和结束时间要让开始时间排在前面,因为开始时间和结束时间相同的这一对是时间重合的,把开始时间的标记打得比结束时间小,可以保留更多A场馆重合的场次的B场馆的时间对。
v1.push_back(make_pair(make_pair(b,),make_pair(c,d)));
v2.push_back(make_pair(make_pair(c,-),make_pair(a,b)));
v2.push_back(make_pair(make_pair(d,),make_pair(a,b)));
}
sort(v1.begin(),v1.end());
sort(v2.begin(),v2.end());
if(!check(v1)||!check(v2))
cout<<"NO";
else
cout<<"YES";
return ;
}
Hello 2020D(多重集)的更多相关文章
- C++ 多重集的使用
C++ 多重集的使用 多重集当中的数据映射关系将不是前面的一对一的关系,而是一对多,也就是可以在容器当中插入具有相同key的实例.关于组织方式,LZ进行了下面的大胆的预测. 第一.底层的数据组织方式如 ...
- Vijos_1792_摆花_(动态规划,多重集组合数)
描述 https://vijos.org/p/1792 共n种花,第i种花有a[i]个,要摆m个,同一种花连续且花按照序号从小到大排,问共有多少种摆花方案. 描述 小明的花店新开张,为了吸引顾客, ...
- POJ_3046_Ant_Counting_(动态规划,多重集组合数)
描述 http://poj.org/problem?id=3046 n种蚂蚁,第i种有ai个,不同种类的蚂蚁可以相互区分,但同一种类的蚂蚁不能相互区分,从这些蚂蚁中取出s,s+1,s+2,...,b- ...
- Problem I: STL——多重集的插入和删除
Problem I: STL--多重集的插入和删除 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 1729 Solved: 1258[Submit][ ...
- Codeforces Round #523 (Div. 2) D. TV Shows 模拟(多重集 先把所有区间加入多重集合)+贪心+二分
题意:给出n个电视节目的起始和结束时间 并且租一台电视需要x +y*(b-a) [a,b]为时段 问完整看完电视节目的最小花费是多少 思路:贪心的思想 情况1 如果新租一台电视的花费<=在空 ...
- 乘法原理,加法原理,多重集的排列数(多个系列操作穿插的排列数) 进阶指南 洛谷p4778
https://www.luogu.org/problemnew/solution/P4778 非常好的题目,囊括了乘法加法原理和多重集合排列,虽然最后使用一个结论解出来的.. 给定一个n的排列,用最 ...
- hdu6397 Character Encoding 母函数解约束条件下多重集
http://acm.hdu.edu.cn/showproblem.php?pid=6397 原问题的本质是问m个元素的多重集S,每一种类型的对象至多出现n-1次的S的k组合的个数是多少? 等价于 x ...
- poj 3046 Ant Counting(多重集组合数)
Ant Counting Time Limit : 2000/1000ms (Java/Other) Memory Limit : 131072/65536K (Java/Other) Total ...
- Codeforces Round #523 (Div. 2)D(二分,多重集)
#include<bits/stdc++.h>using namespace std;const long long N=1e5+5;const long long MOD=1e9+7;l ...
随机推荐
- phpstorm实现分屏展示代码
第一种 选择你要分屏的页面 [Window]—>[Editor Tabs]—>[Split Vertically]or[Split Horizontally] 第二种 把鼠标箭头放到你想 ...
- 题解 AT859 【元素の系統名】
题目传送门. 介绍一种使用string字符串的方法. \(string\)是\(C++\).\(java\).\(VB\)等编程语言中的字符串,字符串是一个特殊的对象,属于引用类型. \(C++\)标 ...
- 野路子码农(5)Python中的装饰器,可能是最通俗的解说
装饰器这个名词一听就充满了高级感,而且很多情况下确实也不常用.但装饰器有装饰器的好处,至少了解这个对装逼还是颇有益处的.网上有很多关于装饰器的解说,但通常都太过“循序渐进”,有的还会讲一些“闭包”之类 ...
- Flatmap 和map 区别
map将函数作用到数据集的每一个元素上,生成一个新的分布式的数据集(RDD)返回 map函数的源码: def map(self, f, preservesPartitioning=False): ...
- 【C语言】思维导图
长按图片或右键另存为保存哦(´-ω-`)
- 删除空目录命令 - rmdir
(1) 命令名称:rmdir (2) 英文原意:remove empty directories (3) 命令所在路径:/bin/rmdir (4) 执行权限:所有用户 (5) 功能描述:删除空目录( ...
- <img src = "..."/>的一个图片上面怎么在放上字
转自:https://zhidao.baidu.com/question/1495805873400412779.html 例子1: html中可以用css相对定位让文字在图片的上面. 1.新建htm ...
- 174. 地下城游戏(逆向DP)
Q: 一些恶魔抓住了公主(P)并将她关在了地下城的右下角.地下城是由 M x N 个房间组成的二维网格.我们英勇的骑士(K)最初被安置在左上角的房间里,他必须穿过地下城并通过对抗恶魔来拯救公主. 骑士 ...
- Elasticsearch系列---倒排索引原理与分词器
概要 本篇主要讲解倒排索引的基本原理以及ES常用的几种分词器介绍. 倒排索引的建立过程 倒排索引是搜索引擎中常见的索引方法,用来存储在全文搜索下某个单词在一个文档中存储位置的映射.通过倒排索引,我们输 ...
- mybatis(六):设计模式 - 建造者模式