• Hello 2020D(多重集)


    如果有一对时间对在某一场馆有时间重合而这一对时间对在另一场馆没有时间重合,则输出NO,否则输出YES。

     1 #define HAVE_STRUCT_TIMESPEC
     2 #include<bits/stdc++.h>
     3 using namespace std;
     4 vector<pair<pair<int,int>,pair<int,int> > >v1,v2;
     5 int check(const vector<pair<pair<int,int>,pair<int,int> > >&v){//常引用,既提高了效率,也不会让参数在函数中被改动
     6     multiset<int>l,r;//保留了某一场馆时间重合的场次下另一场馆的时间对。
     7     for(int i=0;i<v.size();++i){
     8         pair<pair<int,int>,pair<int,int> >it=v[i];
     9         pair<int,int>temp=it.first;
    10         pair<int,int>temp2=it.second;
    11         if(temp.second==0){
    12             l.erase(l.find(temp2.first));
    13             r.erase(r.find(temp2.second));
    14         }
    15         else{
    16             multiset<int>::iterator x=r.lower_bound(temp2.first);
    17             if(x!=r.begin())//如果有比当前开始时间更小的结束时间,说明这一场馆可以有一对没有时间重合的时间对且另一场馆这一对时间重合。
    18                 return 0;
    19             multiset<int>::iterator y=l.upper_bound(temp2.second);
    20             if(y!=l.end())//如果有比当前结束时间更大的开始时间,说明这一场馆可以有一对没有时间重合的时间对且另一场馆这一对时间重合。
    21                 return 0;
    22             l.insert(temp2.first);
    23             r.insert(temp2.second);
    24         }
    25     }
    26     return 1;
    27 }
    28 int main(){
    29     ios::sync_with_stdio(false);
    30     cin.tie(NULL);
    31     cout.tie(NULL);
    32     int n;
    33     cin>>n;
    34     int a,b,c,d;
    35     for(int i=1;i<=n;++i){
    36         cin>>a>>b>>c>>d;
    37         v1.push_back(make_pair(make_pair(a,-1),make_pair(c,d)));//相同的开始时间和结束时间要让开始时间排在前面,因为开始时间和结束时间相同的这一对是时间重合的,把开始时间的标记打得比结束时间小,可以保留更多A场馆重合的场次的B场馆的时间对。
    38         v1.push_back(make_pair(make_pair(b,0),make_pair(c,d)));
    39         v2.push_back(make_pair(make_pair(c,-1),make_pair(a,b)));
    40         v2.push_back(make_pair(make_pair(d,0),make_pair(a,b)));
    41     }
    42     sort(v1.begin(),v1.end());
    43     sort(v2.begin(),v2.end());
    44     if(!check(v1)||!check(v2))
    45         cout<<"NO";
    46     else
    47         cout<<"YES";
    48     return 0;
    49 }
    保持热爱 不懈努力 不试试看怎么知道会失败呢(划掉) 世上无难事 只要肯放弃(划掉)
  • 相关阅读:
    Android系统在新进程中启动自定义服务过程(startService)的原理分析
    Thread和Service应用场合的区别
    Android数据格式解析对象JSON用法
    数据交换格式XML和JSON对比
    Android Handler的使用
    Android之Handler用法总结
    Handler的另外一种用法(HandlerThread)
    solr原理
    mysql主从:主键冲突问题
    修改mysql数据库存储目录
  • 原文地址:https://www.cnblogs.com/ldudxy/p/12162070.html
Copyright © 2020-2023  润新知