zoukankan      html  css  js  c++  java
  • codeforces 523D tatistics of Recompressing Videos

    一个称为DH(DogHouse)的狗的社交网络有k台专用服务器来重新上传可爱的猫的上传视频。每个视频上传后,应该在一个(任何)服务器上重新压缩,之后才可以保存在社交网络中。

    我们知道每个服务器需要一秒钟来重新压缩一分钟的片段。因此,任何服务器需要m秒钟来重新压缩m分钟的视频。

    我们知道每个n个视频上传到网络的时间(从所有服务器开始工作的时间开始)。所有视频都会出现在不同的时刻,并按照他们出现的顺序重新压缩。如果有些视频出现在时间s,那么它的再压缩可以立即从那个时刻开始。当所有服务器都忙时,有些视频可以等待重新压缩。在这种情况下,只要服务器可用,它立即开始重新压缩另一个视频。正在等待重新压缩的视频进入队列。如果视频开始被重新压缩,那么有些服务器可用,那么其中任何一个开始重新压缩视频。

    对于每个视频,找到停止重新压缩的那一刻。

    输入:

    第一行n,k<=5*10^5表示视频数,有k台服务器

    接下来n行每行表示一个视频,分别是ai,bi<=10^9。为开始时间与压缩时间

    输出:

    每个点的最小结束时间

    输入
    3 2 
    1 5
    2 5
    3 5
    输出
    6 
    7
    11
    输入
    6 1 
    1 1000000000
    2 1000000000
    3 1000000000
    4 1000000000
    5 1000000000
    6 3
    输出
    1000000001 
    2000000001
    3000000001
    4000000001
    5000000001
    5000000004
    数据保证是递增排序的,所以不要排序
    所以直接贪心,当堆中满了,选择完成时间最靠前的视频pop
    所以堆维护完成时间,算出视频完成时间后加入堆
     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<queue>
     6 using namespace std;
     7 typedef long long LL;
     8 struct Node
     9 {
    10     LL a,b,num;
    11 }a[500001];
    12 priority_queue<LL, vector<LL>,greater<LL> >q;
    13 LL n,m,sum,t[500001];
    14 LL max(LL a,LL b)
    15 {
    16     if (a<b) return b;
    17     else return a;
    18 }
    19 int main()
    20 {LL i,j;
    21 //freopen("water.in","r",stdin);
    22 //freopen("water.out","w",stdout);
    23     cin>>n>>m;
    24     for (i=1;i<=n;i++)
    25     {
    26         scanf("%I64d%I64d",&a[i].a,&a[i].b);
    27         a[i].num=i;
    28     }
    29     //sort(a+1,a+n+1,cmp);
    30     for (i=1;i<=n;i++)
    31     {
    32         if (sum<m)
    33         {
    34           sum++;
    35            q.push(a[i].a+a[i].b);
    36            t[i]=a[i].a+a[i].b;
    37         }
    38         else
    39         {
    40             LL tmp=q.top();
    41             q.pop();
    42             q.push(max(tmp,a[i].a)+a[i].b);
    43             t[i]=max(tmp,a[i].a)+a[i].b;
    44         }
    45     }
    46     for (i=1;i<=n;i++)
    47     printf("%I64d
    ",t[i]);
    48 }
  • 相关阅读:
    jmeter BeanShell内置变量的基本使用
    自定义 resetCSS
    JavaScript + html 制作钟表
    JavaScript 实现放大镜效果
    JavaScript 实现拖拽
    JavaScript 阻止事件的默认行为
    JavaScript 事件冒泡
    JavaScript 鼠标事件、键盘事件
    JavaScript window.location
    JavaScript 中document.getElementsByClassName() 在ie8以下不兼容问题
  • 原文地址:https://www.cnblogs.com/Y-E-T-I/p/7394235.html
Copyright © 2011-2022 走看看