题意:给你n个任务的开始时间和结束时间,一个机器同时最多执行一个任务,问你最少要几个机器。保证机器最少的前提下,问你每个机器的开动时间(最后一次关闭-第一次开启)之和最少是多少。

把这些线段画在数轴上,最大的重叠数就是最少要几个机器。

开动时间怎么算呢?第i个机器的开动时间其实就是(再也不需要>=i台机器的第一个位置 - 需要>=i台机器的第一个位置)。对每个机器的这个值求和即可。

要先离散化。

  1. #include<cstdio>
  2. #include<algorithm>
  3. #include<cstring>
  4. using namespace std;
  5. typedef long long ll;
  6. struct Point{
  7. int p,v;
  8. }t[200005];
  9. bool cmp(const Point &a,const Point &b)
  10. {
  11. return a.v<b.v;
  12. }
  13. int T,n;
  14. int xs[100005],ys[100005],a[200005],ma[200005],Left[200005],Right[200005];
  15. int sufmax[200005];
  16. int main(){
  17. //freopen("1010.in","r",stdin);
  18. scanf("%d",&T);
  19. for(;T;--T){
  20. memset(a,0,sizeof(a));
  21. memset(ma,0,sizeof(ma));
  22. memset(Left,0x7f,sizeof(Left));
  23. memset(Right,0,sizeof(Right));
  24. memset(sufmax,0,sizeof(sufmax));
  25. int all=0;
  26. scanf("%d",&n);
  27. for(int i=1;i<=n;++i){
  28. ++all;
  29. scanf("%d",&t[all].v);
  30. t[all].p=all;
  31. ++all;
  32. scanf("%d",&t[all].v);
  33. t[all].p=all;
  34. }
  35. sort(t+1,t+all+1,cmp);
  36. int zy=0;
  37. if(t[1].p%2==1){
  38. xs[(t[1].p+1)/2]=++zy;
  39. }
  40. else{
  41. ys[t[1].p/2]=++zy;
  42. }
  43. ma[zy]=t[1].v;
  44. for(int i=2;i<=all;++i){
  45. if(t[i].v!=t[i-1].v){
  46. ++zy;
  47. }
  48. if(t[i].p%2==1){
  49. xs[(t[i].p+1)/2]=zy;
  50. }
  51. else{
  52. ys[t[i].p/2]=zy;
  53. }
  54. ma[zy]=t[i].v;
  55. }
  56. for(int i=1;i<=n;++i){
  57. ++a[xs[i]];
  58. --a[ys[i]];
  59. }
  60. for(int i=1;i<=zy;++i){
  61. a[i]+=a[i-1];
  62. }
  63. sufmax[zy]=a[zy];
  64. for(int i=zy-1;i>=1;--i){
  65. sufmax[i]=max(a[i],sufmax[i+1]);
  66. }
  67. int ans=*max_element(a+1,a+zy+1);
  68. for(int i=1;i<=zy;++i){
  69. if(Left[a[i]]>2000000000){
  70. Left[a[i]]=i;
  71. }
  72. }
  73. for(int i=ans-1;i>=1;--i){
  74. Left[i]=min(Left[i],Left[i+1]);
  75. }
  76. for(int i=zy;i>=1;--i){
  77. if(sufmax[i]!=sufmax[i-1]){
  78. for(int j=sufmax[i]+1;j<=sufmax[i-1];++j){
  79. Right[j]=i;
  80. }
  81. }
  82. }
  83. ll sum=0;
  84. for(int i=1;i<=ans;++i){
  85. sum+=(ll)(ma[Right[i]]-ma[Left[i]]);
  86. }
  87. printf("%d %lld\n",ans,sum);
  88. }
  89. return 0;
  90. }

【贪心】hdu6180 Schedule的更多相关文章

  1. 贪心-Course Schedule III

    2020-02-01 21:37:39 问题描述: 问题求解: 对于课程来说截止时间在前面的肯定需要优先安排,所以首先需要将courses按照deadline进行排序. 然后只需要不断的加入当前的课程 ...

  2. HDU - 6180:Schedule(简单贪心)

    There are N schedules, the i-th schedule has start time s i  si and end time e i  ei (1 <= i < ...

  3. POJ 3553 Task schedule【拓扑排序 + 优先队列 / 贪心】

    Task schedule Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 515 Accepted: 309 Special J ...

  4. Schedule HDU - 6180 (multiset , 贪心)

    There are N schedules, the i-th schedule has start time si and end time ei (1 <= i <= N). Ther ...

  5. 2017多校第10场 HDU 6180 Schedule 贪心,multiset

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6180 题意:给了一些任务的开始时间和终止时间,现在让我们安排k台及机器,让这些任务在k太机器上最小,并 ...

  6. 【CodeForces 589F】Gourmet and Banquet(二分+贪心或网络流)

    F. Gourmet and Banquet time limit per test 2 seconds memory limit per test 512 megabytes input stand ...

  7. codeforces 480A A. Exams(贪心)

    题目链接: A. Exams time limit per test 1 second memory limit per test 256 megabytes input standard input ...

  8. POJ 1456 Supermarket 区间问题并查集||贪心

    F - Supermarket Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Sub ...

  9. Ferry Loading II_贪心

    Description Before bridges were common, ferries were used to transport cars across rivers. River fer ...

随机推荐

  1. 解决vue代码缩进报错问题 关闭ESlint

    前言 使用vue-cli来构建单页SPA应用,提示代码缩进报错 原因分析 通过查看package.json文件我们可以发现,在文件中默认安装了eslint-loader模块,eslint-loader ...

  2. Coursera在线学习---第八节.K-means聚类算法与主成分分析(PCA)

    一.K-means聚类中心初始化问题. 1)随机初始化各个簇类的中心,进行迭代,直到收敛,并计算代价函数J. 如果k=2~10,可以进行上述步骤100次,并分别计算代价函数J,选取J值最小的一种聚类情 ...

  3. servlet线程不安全

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAlgAAAE9CAIAAABY1Yv/AAAgAElEQVR4nOy9eVxN2/8/viuaU5kqZW

  4. python--lxml

    ''' xpath语法: /:在子节点里面找 //:在子子孙孙里面找 //div:查找当前网页的所有div标签 //div/p:先查找所有div标签,再找div的子标签中的p标签 //div//p:现 ...

  5. Vim的分屏功能(转)

    注:本文属于转载,源地址:http://blog.csdn.net/ithomer/article/details/6035627(博主很牛,欢迎关注) 本篇文章主要教你如何使用 Vim 分屏功能 分 ...

  6. eclipse 配置jsp

    1.安装jdk和jre 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html ...

  7. php性能的问题

    一.影响php性能的常见原因 1.php自身语法使用不当 2.php做了不擅长的时期() 3.php的周边环境(服务器Linux,磁盘:文件存储,数据库,缓存:内存,网络:带宽) 4.php自身的短板 ...

  8. P2885

    2885 code[class*="language-"] { padding: .1em; border-radius: .3em; white-space: normal; b ...

  9. 解决错误:此用户名包含无效字符,请输入有效的用户名。wordpress不能注册中文用户名的问题

    wordpress在默认情况下不支持中文用户名,就是在后台添加用户的时候,如果用户名包含中文,则显示”错误:此用户名包含无效字符,请输入有效的用户名.”如何解决这个问题呢? 不用插件的话就需要修改一个 ...

  10. 【Mac电脑】Jenkins的安装

    1.JDK自己下载安装喽, 2.下载Jenkins 下载路径:https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.121.1/jenki ...