C. Planning

传送门

Helen works in Metropolis airport. She is responsible for creating a departure schedule. There are n flights that must depart today, the i-th of them is planned to depart at the i-th minute of the day.

Metropolis airport is the main transport hub of Metropolia, so it is difficult to keep the schedule intact. This is exactly the case today: because of technical issues, no flights were able to depart during the first k minutes of the day, so now the new departure schedule must be created.

All n scheduled flights must now depart at different minutes between (k + 1)-th and (k + n)-th, inclusive. However, it's not mandatory for the flights to depart in the same order they were initially scheduled to do so — their order in the new schedule can be different. There is only one restriction: no flight is allowed to depart earlier than it was supposed to depart in the initial schedule.

Helen knows that each minute of delay of the i-th flight costs airport ci burles. Help her find the order for flights to depart in the new schedule that minimizes the total cost for the airport.

Input

The first line contains two integers n and k (1 ≤ k ≤ n ≤ 300 000), here n is the number of flights, and k is the number of minutes in the beginning of the day that the flights did not depart.

The second line contains n integers c1, c2, ..., cn (1 ≤ ci ≤ 107), here ci is the cost of delaying the i-th flight for one minute.

Output

The first line must contain the minimum possible total cost of delaying the flights.

The second line must contain n different integers t1, t2, ..., tn (k + 1 ≤ ti ≤ k + n), here ti is the minute when the i-th flight must depart. If there are several optimal schedules, print any of them.

Example
input

Copy
  1. 5 2
    4 2 1 10 2
output

Copy
  1. 20
    3 6 7 4 5
Note

Let us consider sample test. If Helen just moves all flights 2 minutes later preserving the order, the total cost of delaying the flights would be (3 - 1)·4 + (4 - 2)·2 + (5 - 3)·1 + (6 - 4)·10 + (7 - 5)·2 = 38 burles.

However, the better schedule is shown in the sample answer, its cost is (3 - 1)·4 + (6 - 2)·2 + (7 - 3)·1 + (4 - 4)·10 + (5 - 5)·2 = 20burles.

题意:有n架飞机,他们原本的起飞时间依次是1~n,但前k分钟不能起飞,已知第i架飞机延误每1min花费为ci,且不能比原定时间早起飞问每架飞机在第几分钟起飞花费最少。

题解:因为不能比原定时间早起飞,我们先将在第k+i秒可以起飞的飞机放到优先队列里面,再将每分钟花费高的或者花费相同时间比较前的弹出来给他先安排时间起飞。(用set也可(set也是用于排序))

代码:

  1. #include<bits/stdc++.h>
  2. #define ll long long
  3. using namespace std;
  4. const int N = 3e5 + ;
  5. struct node{
  6. int id,c;
  7. bool operator < (const node &x)const {
  8. if (c == x.c) return id < x.id;
  9. return c < x.c;
  10. }
  11. }a[N],x;
  12. int ans[N];
  13. int main(){
  14. int n,k;
  15. scanf("%d%d",&n,&k);
  16. for (int i = ; i <= n; i++) {
  17. scanf("%d",&a[i].c);
  18. a[i].id = i;
  19. }
  20. ll sum = ;
  21. priority_queue<node> q;
  22. for (int i = ; i <= k; i++) q.push(a[i]);
  23. for (int i = k+; i <= k+n; i++) {
  24. if (i<=n) q.push(a[i]);
  25. x = q.top();
  26. q.pop();
  27. sum += 1ll*(i-x.id)*x.c;
  28. ans[x.id] = i;
  29. }
  30. printf("%lld\n", sum);
  31. for (int i = ; i <= n; i++)
  32. printf("%d%c", ans[i],i==n?'\n':' ');
  33. return ;
  34. }

优先队列

  1. #include<bits/stdc++.h>
  2. #define ll long long
  3. using namespace std;
  4. const int N = 3e5 + ;
  5. struct node{
  6. int id,c;
  7. }a[N],x;
  8. bool cmp(node i,node j) {
  9. if (i.c == j.c) return i.id > j.id;
  10. return i.c>j.c;
  11. }
  12. int ans[N];
  13. set<int> s;
  14. int main(){
  15. int n,k;
  16. scanf("%d%d",&n,&k);
  17. for (int i = ; i <= n; i++) {
  18. scanf("%d",&a[i].c);
  19. a[i].id = i;
  20. s.insert(i+k);
  21. }
  22. sort(a+,a+n+,cmp);
  23. ll sum = ;
  24. for (int i = ; i <= n; i++) {
  25. int x = *s.lower_bound(a[i].id);
  26. sum += 1ll*(x-a[i].id)*a[i].c;
  27. ans[a[i].id] = x;
  28. s.erase(x);
  29. }
  30. printf("%lld\n", sum);
  31. for (int i = ; i <= n; i++)
  32. printf("%d%c", ans[i],i==n?'\n':' ');
  33. return ;
  34. }

Set

CF854C Planning优先队列|set的更多相关文章

  1. CodeForces - 853A Planning (优先队列,贪心)

    Helen works in Metropolis airport. She is responsible for creating a departure schedule. There are n ...

  2. codeforces 854C.Planning 【贪心/优先队列】

    Planning time limit per test 1 second memory limit per test 512 megabytes input standard input outpu ...

  3. #433 Div2 Problem C Planning (贪心 && 优先队列)

    链接 : http://codeforces.com/contest/854/problem/C 题意 : 有 n 架飞机需要分别在 1~n 秒后起飞,允许起飞的时间是从 k 秒后开始,给出每一架飞机 ...

  4. Planning CodeForces - 854C

    Planning CodeForces - 854C 题意:有n架航班,第i架原先的时候是在第i分钟起飞的.现在前k分钟无法有飞机起飞,因此需要调整安排表,延后飞机起飞.仍然要求每一分钟只有一架飞机起 ...

  5. B - Planning 早训 贪心

    B - Planning 这个题目我知道要贪心,也知道怎么贪,但是写不出来,感觉自己好菜. 这个题目要用优先队列维护. 题目大意是飞机延误,不同的飞机每次延误一分钟,它的代价不同,然后问,怎么安排才能 ...

  6. 敏捷转型历程 - Sprint3 Planning

    我: Tech Leader 团队:团队成员分布在两个城市,我所在的城市包括我有4个成员,另外一个城市包括SM有7个成员.另外由于我们的BA离职了,我暂代IT 的PO 职位.PM和我在一个城市,但他不 ...

  7. 堆排序与优先队列——算法导论(7)

    1. 预备知识 (1) 基本概念     如图,(二叉)堆是一个数组,它可以被看成一个近似的完全二叉树.树中的每一个结点对应数组中的一个元素.除了最底层外,该树是完全充满的,而且从左向右填充.堆的数组 ...

  8. 数据结构:优先队列 基于list实现(python版)

    #!/usr/bin/env python # -*- coding:utf-8 -*- #Author: Minion-Xu #list实现优先队列 class ListPriQueueValueE ...

  9. python优先队列,队列和栈

    打印列表的疑问 class Node: def __str__(self): return "haha" print([Node(),Node()]) print(Node()) ...

随机推荐

  1. Activiti快速入门项目-kft-activiti-demo

    1.项目简介 1.1 项目信息 本项目旨在让Activiti初学者可以快速入门,使用工作流里面的请假流程作为Activiti企业实战的Hello World. 简单通过这个实例说明如何结合流程与业务, ...

  2. 上传图片保存到MySql数据库并显示--经验证有效

    以下方法仅供参考,只是介绍下这一种方法而已.欢迎指正!! 前台(image.html):  1<html> 2<head> 3<title>上传图片</tit ...

  3. 浏览器间CSS样式兼容问题

    1.display:table居中显示 在chrome和safari浏览器上兼容问题 2.滤镜 在chrome浏览器中能正常显示,在360浏览器中不能正常显示 3.省略号问题 对于一行显示,基本上对所 ...

  4. HTML静态网页--图片热点

  5. UVa11400 - Lighting System Design——[动态规划]

    题干略. 题意分析: 很容易理解一类灯泡要么全部换要么全不换,其实费用节省的主要原因是由于替换灯泡类型而排除了低压电压源,于是我们就可以推断出灯泡类型替换的原则: 对于两类灯泡a1和a2,a1可以被a ...

  6. springboot 实现 aop

    pom.xml 导入 springboot aop 依赖 <dependency> <groupId>org.springframework.boot</groupId& ...

  7. Educational Codeforces Round 63部分题解

    Educational Codeforces Round 63 A 题目大意就不写了. 挺简单的,若果字符本来就单调不降,那么就不需要修改 否则找到第一次下降的位置和前面的换就好了. #include ...

  8. BZOJ3527 推出卷积公式FFT求值

    BZOJ3527 推出卷积公式FFT求值 传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=3527 题意: \(F_{j}=\sum_{i&l ...

  9. Java Developer's Guide to SSL Certificates

    https://www.codebyamir.com/blog/java-developers-guide-to-ssl-certificates Overview When developing w ...

  10. 破解第一个程序----分析APK文件

    反编译APK成功后,在outdir目录下会生成一系列目录与文件. smali:程序所有的反汇编代码: res:程序中所有的资源文件: 如何寻找突破口是分析程序的关键.错误提示一般是指引关键代码的风向标 ...