//题意:一个的工作时间是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. JavaScript的DOM操作获取元素的大小

    通过 style 内联获取元素的大小 需要注意的是style 获取只能获取到行内 style 属性的 CSS 样式中的宽和高,如果有获取:如果没有则返回空. <!DOCTYPE html> ...

  2. JavaScript的DOM操作获取元素周边大小

    一.clientLeft 和 clientTop 这组属性可以获取元素设置了左边框和上边框的大小,目前只提供了 Left 和 Top 这组,并没有提供 Right 和 Bottom. <scri ...

  3. laravel框架之blade模板引擎

    ## 1.基本用法 ##情形1 $name = laravel5 <div class="title"> {{$name}} {{$name}}</div> ...

  4. DIV+CSS:如何编写代码才能更有效率

    如何编写CSS代码才能更有效率?这是许多网页制作者与开发者都关心的问题.大概没有什么魔法,可以保证一下就把你的样式表缩小到百分之多少,但合理的 CSS 编码与组织技巧,的确能够帮助你的更有效率地写出更 ...

  5. virtualbox+vagrant学习-2(command cli)-19-vagrant box命令

    Status 格式: vagrant status [name|id] options只有 -h, --help 这将告诉你vagrant正在管理的机器的状态. 很容易就会忘记你的vagrant机器是 ...

  6. virtualbox+vagrant学习-2(command cli)-24-Aliases别名

    Aliases 别名的部分灵感来自Git自身的别名功能,它允许你创建自己的定制vagrant命令,从而使你的vagrant体验更简单.更容易.更熟悉. 别名可以在VAGRANT_HOME/ alias ...

  7. Python自动化之form验证

    model里面进行数据验证 在类里面定义一个clean方法 class User(models.Model): def clean(self): #在这个可以做一些验证的操作 pass 还可以手动抛出 ...

  8. c++——inline内联函数

    1 inline内联函数 C++中的const常量可以替代宏常数定义,如: const int A = 3;  #define A 3 C++中是否有解决方案替代宏代码片段呢?(替代宏代码片段就可以 ...

  9. 添加打印功能 iOS

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

  10. w10下Oracle 11g完全干净卸载

    1.关闭oracle所有的服务.可以在windows的服务管理器中关闭:   2.打开注册表:regedit 打开路径: <找注册表 :开始->运行->regedit>   H ...