//题意:一个的工作时间是m分钟。
// 在特定的时间和咖啡 n a1,a2....an,, ai代表的是每个咖啡要在一天中对应的时间点喝掉
// 每一次喝咖啡的时间为1分钟
// 必须在一天中的ai时刻喝掉对应的咖啡
// 在两次喝咖啡中间要有d分钟休息时间,天与天之间时间大于d
// 尽可能少的天数内将所有咖啡喝完,不只有一种解法
// input 输入 n(n杯咖啡), m(一天有m分钟工作时间), d(间隔时间)
// a1,a2...an(第n杯咖啡要在一天中的第an时间点喝掉) //ouput 输出 最少的天数
// 每杯咖啡在第几天喝掉 //1.set<pair<int,int> >的用法
//
//set默认的比较规则先按照first比较,
//如果first相同,再按照second 比较。
//注意:定义的时候右边的两个>>要空一格。 //upper_bound(begin,end,i)用法是查找排好序的从begin开始到end结束大于i的数,二分查找方法
//lower_bound(begin,end,i)用法是查找排好序的从begin开始到end结束不大于i的数,二分查找方法 //set
//本题用的upper_bound(make_pair(a[pos]+d,INF))后面的INF一定要加,现根据前面查找,然后根据后面查找,均二分
//本题用的lower_bound(make_pair(a[pos]+d+1,0))后面o也一定要加,现根据前面查找,然后根据后面查找,均二分 #include <stdio.h>
#include <string.h>
#include <set>
#include <stdio.h>
#include <iostream>
using namespace std;
const int MAX = 2e5 + ;
const int INF = 9e9 + ;
int a[MAX], ans[MAX];
set<pair<int,int> > ss;
set<pair<int,int> > :: iterator it; int main(){ int n, m, d;
int count = ,pos;
cin >> n >> m >> d;
for( int i = ; i <= n; i++ ) {
scanf("%d",&a[i]);
ss.insert(make_pair(a[i],i));
}
while( !ss.empty() ) {
count++;
// cout<<ss.begin()->first<<" "<<ss.begin()->second<<endl;
pos = ss.begin()->second;
ans[pos] = count;
ss.erase(ss.begin()); while(){
// ss.upper_bound(make_pair(a[pos]+d,INF)) //这两都可以用
it = ss.lower_bound(make_pair(a[pos]++d,));
if(it==ss.end()) break;
pos = it->second;
ans[pos] = count;
ss.erase(it);
}
}
printf("%d\n",count);
for(int i = ;i<=n;i++){
printf("%d%c",ans[i],i==n?'\n':' ');
} return ;
}

【CodeForces-1041C】Coffee Break(二分解决关于set,pair,upper_bound用法)的更多相关文章

  1. CF1041C Coffee Break

    CF1041C Coffee Break 题目大意: 给定nn个数和一个kk,这nn个数都不超过mm 每次从没被去掉的数里面选一个数aa,去掉aa,然后可以任意一个b(b>a+k)b(b> ...

  2. Codeforces 404E: Maze 1D(二分)

    题意:指令“R”机器人会向右走一步,“L”是向左.起初机器人在0位置,可以在除了0以外的任何位置放障碍,如果机器人的指令将使它走到障碍上,那这一步他会保持不动.要求让机器人最终结束的那一步一定只走过一 ...

  3. Coffee Break

    题目链接:Coffee Break  Gym-101911A 题目大意:有一位员工想要利用喝咖啡来休息,他给了一个数组表示他想要喝咖啡的时间点(假设他喝咖啡用时1分钟),老板规定每次喝咖啡的时间间隔必 ...

  4. [Codeforces 1199C]MP3(离散化+二分答案)

    [Codeforces 1199C]MP3(离散化+二分答案) 题面 给出一个长度为n的序列\(a_i\)和常数I,定义一次操作[l,r]可以把序列中<l的数全部变成l,>r的数全部变成r ...

  5. C. Coffee Break 贪心 思维 有点难 有意思

    C. Coffee Break 这个贪心之前好像写过,还是感觉挺难的,有点不会写. 这个题目大意是:给你一个数列n个元素,然后给你一天的时间,给你一个间隔时间d, 问你最少要用多少天可以把这个数列的所 ...

  6. 二分检索函数lower_bound()和upper_bound()

    二分检索函数lower_bound()和upper_bound() 一.说明 头文件:<algorithm> 二分检索函数lower_bound()和upper_bound() lower ...

  7. Codeforces - 1118D2 - Coffee and Coursework (Hard Version) - 二分

    https://codeforces.com/problemset/problem/1118/D2 也是很好想的一个二分啦. 验证m的可行性的时候,肯定是把最多咖啡因的咖啡先尽可能平均分到每一天,因为 ...

  8. CodeForces 670D1 暴力或二分

    今天,开博客,,,激动,第一次啊 嗯,,先来发水题纪念一下 D1. Magic Powder - 1   This problem is given in two versions that diff ...

  9. Codeforces 1114E - Arithmetic Progression - [二分+随机数]

    题目链接:http://codeforces.com/problemset/problem/1114/E 题意: 交互题,有一个 $n$ 个整数的打乱顺序后的等差数列 $a[1 \sim n]$,保证 ...

随机推荐

  1. JAVA 泛型通配符 ? EXTENDS SUPER 的用法

    1. <? extends Hero> ArrayList heroList<? extends Hero> 表示这是一个Hero泛型或者其子类泛型heroList 的泛型可能 ...

  2. Golang - 数据库操作

    1. 下载安装包 go get github.com/Go-SQL-Driver/MySQL go install github.com/Go-SQL-Driver/MySQL 2. 连接池 This ...

  3. ansible--03

    一. Ad-hoc命令简介 1. 格式:ansible <host> [opion] 2. option参数: -v:输出详细的执行过程, -vvv最详细的结果 -i:指定inventor ...

  4. Day9 JSP

    JSP概述 JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术.JSP实际上就是Servlet. jsp = html + ...

  5. /dev/urandom非阻塞的发生器

    JAVA_OPTS="$JAVA_OPTS -Djava.security.egd=file:/dev/./urandom" /dev/urandom   /dev/urandom ...

  6. React 入门学习笔记1

    摘自阮一峰:React入门实例教程,转载请注明出处. 一. 使用React的html模板 使用React, 我们需要加载3个库,react.js, react-dom.js, 和browser.js. ...

  7. 添加打印功能 iOS

    app直接调取系统的打印功能 https://blog.csdn.net/wsyx768/article/details/79098885

  8. C++垃圾回收器的实现

    一.简单介绍 这是一个自己写C++垃圾自己主动回收器,用到的都是标准C++语法.採用了引用计数加mark-sweep的方法.在没有循环引用的情况下,引用计数能够保证垃圾实时得到回收:对于有循环引用的情 ...

  9. iOS裁剪,缩放图片白边问题解决办法

    几年没来了,感觉还是要写点啥,以后碰见问题 解决就写这吧,当是一个随时的笔记也好. iOS裁剪,缩放图片的代码网上也很多了,但是笔者出现了右边和下边出现白边的情况.出现白边的原因是给的size中的CG ...

  10. MySQL 5.7(免安装版)的下载,安装(配置)

    本文适合初学JAVA,要用到MySQL开发的学习者. 第一步.下载MySQL 1. 百度mysql,找到官网,点击进入. 2. 进入官网,点击DOWNLOADS,在DOWNLOADS菜单栏中点击Com ...