题目描述

小凯做题做累了,他想去逛公园。

公园里有 mmm 个亲子项目,每个项目一天只能一个家庭参加。一共有 nnn 个家庭,第 iii 个家庭希望在第 lil_ili​ 到 rir_iri​ 天内参加恰好一次第 pip_ipi​ 个项目。但是公园的工作人员很懒,他们希望上班的天数尽量少。某天要上班当且仅当至少有一个家庭参加了任意一个项目。

工作人员看到了小凯,想让他帮忙使得工作人员有更多咕咕咕的机会。但小凯又双叒叕不会了,所以他请你求出这个最少的上班时间。如果无论如何安排都不能达到要求,输出 GG。

数据范围

n≤105,l,r,m≤109n \le 10^5, l,r,m \le 10^9n≤105,l,r,m≤109

题解

挺妙又难写的一道贪心题。

考虑每种类型能否满足,考虑到如果右端点都不同的话,那每个区间都取右端点就好了,于是考虑右端点相同的情况,那我们先让左端点最大的区间先确定这个右端点,剩下区间右端点左移即可,这样我们就可以把一个类型的区间的右端点变得互不相同。

考虑多个类型,首先我们先找到一个还没确定的区间中右端点最小的那个,那对于剩下的类型,如果存在左端点大于等于这个右端点的,那可以把这个区间确定在这个右端点上,如果有多个区间同时满足,根据贪心应该让右端点最小的被确定。

具体实现有点复杂(STL大法好)。

代码

#include <bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int n,m,t,ans,fl[N];
struct O{int l,r,x;friend bool operator < (const O& A,const O& B){return A.l<B.l;}
}p[N];
struct S{int l,r,x,i;friend bool operator < (const S& A,const S& B){return A.r<B.r;}
};
multiset<S>s;
priority_queue<O>q;
priority_queue<S>d[N];vector<O>e[N];
queue<int>h,H;
bool cmp(O A,O B){return A.x!=B.x?A.x<B.x:A.r>B.r;
}
int main(){cin>>n>>m;for (int i=1,l,r,x;i<=n;i++)scanf("%d%d%d",&l,&r,&x),p[i]=(O){l,r,x};sort(p+1,p+n+1,cmp);for (int i=1,j=0,r;i<=n;i=j+1){while(j<n && p[j+1].x==p[i].x) j++;t++;r=0;for (int k=i;k<=j;k++)p[k].x=t,r=max(p[k].r,r);for (int k=r,c=i;;k--){if (q.empty()) k=p[c].r;while(c<=j && p[c].r==k)q.push(p[c]),c++;if (!q.empty()){O u=q.top();u.r=k;q.pop();if (u.r<u.l) return puts("GG"),0;e[u.x].push_back(u);}if (c>j && q.empty()) break;}}for (int i=1,z,j=0;i<=t;i++){z=e[i].size();sort(e[i].begin(),e[i].end());for (int k=0;k<z;k++) p[++j]=e[i][k];}sort(p+1,p+n+1);for (int i=1;i<=n;i++)s.insert((S){p[i].l,p[i].r,p[i].x,i});for (int j=0,i;!s.empty();){S u=(*s.begin());ans++;s.erase(s.begin());fl[u.i]=1;while(j<n && p[j+1].l<=u.r){j++;if (fl[j]) continue;if (d[i=p[j].x].empty()) h.push(i);d[i].push((S){p[j].l,-p[j].r,p[j].x,j});}while(!h.empty()){int x=h.front();h.pop();while(!d[x].empty())if (fl[d[x].top().i]) d[x].pop();else break;if (d[x].empty()) continue;if (x==u.x){H.push(x);continue;}S v=d[x].top();v.r=-v.r;d[x].pop();s.erase(s.find(v));fl[v.i]=1;H.push(x);}h=H;while(!H.empty()) H.pop();}cout<<ans<<endl;return 0;
}

#4617. 逛公园相关推荐

  1. TYVJ1427 小白逛公园

    P1427 小白逛公园 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 小新经常陪小白去公园玩,也就是所谓的遛狗啦-在小新家附近有一条"公园路&qu ...

  2. JZOJ 5475. 【NOIP2017提高组正式赛】逛公园

    Description 策策同学特别喜欢逛公园.公园可以看成一张n个点m条边构成的有向图,且没有自环和重边.其中1号点是公园的入口,n号点是公园的出口,每条边有一个非负权值,代表策策经过这条边所要花的 ...

  3. 牛客小白月赛12 I 华华和月月逛公园 (tarjian 求桥)

    链接:https://ac.nowcoder.com/acm/contest/392/I 来源:牛客网 华华和月月逛公园 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K, ...

  4. 【NOIP2017】逛公园 拆点最短路+拓扑(记忆化搜索

    题目描述 策策同学特别喜欢逛公园.公园可以看成一张N个点M条边构成的有向图,且没有 自环和重边.其中1号点是公园的入口,N号点是公园的出口,每条边有一个非负权值, 代表策策经过这条边所要花的时间. 策 ...

  5. 【ybt高效进阶4-4-3】【luogu P4513】公园遛狗 / 小白逛公园

    公园遛狗 / 小白逛公园 题目链接:ybt高效进阶4-4-3 / luogu P4513 题目大意 给你一个序列,要维护两个操作. 单点修改和在一个区间中找权值最大的子区间的权值. 思路 其实这个是很 ...

  6. 公园遛狗(小 * 逛公园)

    P4513 小白逛公园 线段树求最大子段和,由于是动态的且n,m均高达1e5,因此想到线段树 #include<bits/stdc++.h> using namespace std; #d ...

  7. NOIP 2017 逛公园 记忆化搜索 最短路 好题

    题目描述: 策策同学特别喜欢逛公园.公园可以看成一张N个点MM条边构成的有向图,且没有 自环和重边.其中1号点是公园的入口,N号点是公园的出口,每条边有一个非负权值, 代表策策经过这条边所要花的时间. ...

  8. 牛客网IT校招编程题-逛公园-Python

    题目描述: 又是晴朗的一天,牛牛的小伙伴们都跑来找牛牛去公园玩.但是牛牛想呆在家里看E3展,不想出去逛公园,可是牛牛又不想鸽掉他的小伙伴们,于是找来了公园的地图,发现公园是由一个边长为n的正方形构成的 ...

  9. 洛谷 P3953 [NOIP2017 提高组] 逛公园

    开始刷题单啦~,这部分的洛谷好题作为个人训练记录和以后复习用,有兴趣的可以一起做做 题目链接:P3953 [NOIP2017 提高组] 逛公园 题意都是中文就不翻译了 题解:这是一道记忆化+搜索的题目 ...

最新文章

  1. javascript 点点滴滴 jquery
  2. EF中加载实体的方式
  3. 使用MySQL验证Open***用户登录访问
  4. 剑指Offer09-用两个栈实现队列
  5. 基于JAVA+SpringMVC+Mybatis+MYSQL的网上商城系统
  6. linux环境下安装OpenGL
  7. 2021杨铭杰高考成绩查询,谁知道汕头一中2007年高考成绩的概况
  8. 【干货】图文并茂生动详解命名实体识别NER理论与代码实战
  9. PacketiX ××× Server中三层交换机的路由表配置说明:
  10. 卡密社区源码无加密完整版(php源码+mysql脚本)
  11. html5二维动画教程,Flash二维动画制作案例教程
  12. Mysql日常操作记录
  13. 完美解决python3.6环境下,使用pyinstaller打包.exe时报错的情况。
  14. springboot+vue+elementUI springboot地方废物回收机构管理系统-#毕业设计
  15. workgroup无法访问。您可能没有权限使用网络资源……(解决方案)
  16. Spring 实战-第四章-4.3 使用注解引入新方法 Introductions@DeclareParents
  17. 局域网联机_七日杀v17.2(B27)版/支持局域网联机/多项修改器/初始存档/局域网联机教程...
  18. GoLang - Go中Mocking(1)
  19. 网易云对象存储获取私有对象下载链接打不开的问题
  20. 学会重构与对比 ——码农鼻祖天才香农

热门文章

  1. 皮尔逊相关系数python实现
  2. 由于启用计算机,Win10怎么解决提示由于启动计算机时出现页面文件配置问题?
  3. Android应用开发-小巫CSDN博客客户端之集成友盟社会化分享组件
  4. BZOJ1018: [SHOI2008]堵塞的交通traffic
  5. PTA 7-51 打字
  6. ubuntu安装百度云盘(亲测可行)
  7. mails plugin
  8. 跨境电商必读,WhatsApp营销入门指南!
  9. (求助贴)树莓派HDMI连接电视无信号
  10. 用 pyfolio 进行量化交易回测