hihoCoder 第136周 优化延迟(二分答案+手写堆)
题目1 : 优化延迟
描述
小Ho编写了一个处理数据包的程序。程序的输入是一个包含N个数据包的序列。每个数据包根据其重要程度不同,具有不同的"延迟惩罚值"。序列中的第i个数据包的"延迟惩罚值"是Pi。如果N个数据包按照<Pi1, Pi2, ... PiN>的顺序被处理,那么总延迟惩罚
SP=1*Pi1+2*Pi2+3*Pi3+...+N*PiN(其中i1, i2, ... iN是1, 2, 3, ... N的一个排列)。
小Ho的程序会依次处理每一个数据包,这时N个数据包的总延迟惩罚值SP为
1*P1+2*P2+3*P3+...+i*Pi+...+N*PN。
小Hi希望可以降低总延迟惩罚值。他的做法是在小Ho的程序中增加一个大小为K的缓冲区。N个数据包在被处理前会依次进入缓冲区。当缓冲区满的时候会将当前缓冲区内"延迟惩罚值"最大的数据包移出缓冲区并进行处理。直到没有新的数据包进入缓冲区时,缓冲区内剩余的数据包会按照"延迟惩罚值"从大到小的顺序被依次移出并进行处理。
例如,当数据包的"延迟惩罚值"依次是<5, 3, 1, 2, 4>,缓冲区大小K=2时,数据包被处理的顺序是:<5, 3, 2, 4, 1>。这时SP=1*5+2*3+3*2+4*4+5*1=38。
现在给定输入的数据包序列,以及一个总延迟惩罚阈值Q。小Hi想知道如果要SP<=Q,缓冲区的大小最小是多少?
输入
Line 1: N Q
Line 2: P1 P2 ... PN
对于50%的数据: 1 <= N <= 1000
对于100%的数据: 1 <= N <= 100000, 0 <= Pi <= 1000, 1 <= Q <= 1013
输出
输出最小的正整数K值能满足SP<=Q。如果没有符合条件的K,输出-1。
- 样例输入
-
5 38 5 3 1 2 4
- 样例输出
-
2
题目链接:hihoCoder 第136周
题目非常明显就是裸的二分答案,想测试的堆看看手写的是不是有问题,以及速度如何,比封装的pq要快一些前者700ms+后者1000ms+,方便起见我的堆是递归形式的,非递归就不是很熟了。
代码:
#include <stdio.h>
#include <bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
#define LC(x) (x<<1)
#define RC(x) ((x<<1)+1)
#define MID(x,y) ((x+y)>>1)
#define CLR(arr,val) memset(arr,val,sizeof(arr))
#define FAST_IO ios::sync_with_stdio(false);cin.tie(0);
typedef pair<int, int> pii;
typedef long long LL;
const double PI = acos(-1.0);
const int N = 100010;
LL arr[N];
int n;
LL q;struct heap
{LL a[N];int sz;void init(){sz = 0;}void up(const int &cur){int fa = cur >> 1;if (fa > 0 && a[cur] > a[fa]){swap(a[cur], a[fa]);up(fa);}}void down(const int &cur){int lson = cur << 1, rson = cur << 1 | 1;if (lson > sz)return ;else{int tar;if (rson > sz)tar = lson;elsetar = a[lson] > a[rson] ? lson : rson;if (a[cur] < a[tar]){swap(a[tar], a[cur]);down(tar);}}}void push(int x){a[++sz] = x;up(sz);}void pop(){swap(a[sz--], a[1]);down(1);}LL top(){return a[1];}bool empty(){return !sz;}
};
heap one;bool check(const int &k)
{one.init();LL bas = 1LL;LL sp = 0LL;for (int i = 1; i <= k; ++i)one.push(arr[i]);for (int i = k + 1; i <= n; ++i){sp += (bas++) * one.top();one.pop();one.push(arr[i]);}while (!one.empty()){sp += (bas++) * one.top();one.pop();}return sp <= q;
}
int main(void)
{int i;while (~scanf("%d%lld", &n, &q)){for (i = 1; i <= n; ++i)scanf("%lld", arr + i);int ans = -1;int L = 1, R = n;while (L <= R){int mid = (L + R) >> 1;if (check(mid)){R = mid - 1;ans = mid;}elseL = mid + 1;}printf("%d\n", ans);}return 0;
}
转载于:https://www.cnblogs.com/Blackops/p/6370087.html
hihoCoder 第136周 优化延迟(二分答案+手写堆)相关推荐
- vue渲染大量数据如何优化_Vue3 Compiler 优化细节,如何手写高性能渲染函数
送5本<你不知道的 JavaScript 上卷>点我抽奖,祝大家好运 Vue3 的 Compiler 与 runtime 紧密合作,充分利用编译时信息,使得性能得到了极大的提升.本文的目的 ...
- Djkastra堆(手写堆)优化版
直接上代码 代码中的注释掉的部分为C++优先队列实现 #include<cstdio> #include<cstdlib> #include<iostream> # ...
- 2021-最新Web前端经典面试试题及答案-史上最全前端面试题(含答案)---手写代码篇
★★★ 手写代码:实现forEach map filter reduce ★★★ 手写实现一个简易的 Vue Reactive ★★★ 手写代码,监测数组变化,并返回数组长度 ★★★ 手写原生继承,并 ...
- 《二分答案》—— P1873 [COCI 2011/2012 #5] EKO / 砍树
[COCI 2011/2012 #5] EKO / 砍树 题目描述 伐木工人 Mirko 需要砍 M M M 米长的木材.对 Mirko 来说这是很简单的工作,因为他有一个漂亮的新伐木机,可以如野火一 ...
- POJ 2018 Best Cow Fences (二分答案构造新权值 or 斜率优化)
$ POJ~2018~Best~Cow~ Fences $(二分答案构造新权值) $ solution: $ 题目大意: 给定正整数数列 $ A $ ,求一个平均数最大的长度不小于 $ L $ 的子段 ...
- 切蛋糕4 likes in 二分答案,剪枝优化
给定m个人和n块蛋糕 首先是需要先sort一遍把人的嘴的大小拍一遍序,如果是我,的话,用有限的蛋糕,满足的更多的人,我会选择满足 嘴巴小的人 所以先sort一遍,把所有的人的嘴巴排序一遍,二分答案 W ...
- [APIO2017]商旅——分数优化+floyd+SPFA判负环+二分答案
题目链接: [APIO2017]商旅 枚举任意两个点$(s,t)$,求出在$s$买入一个物品并在$t$卖出的最大收益. 新建一条从$s$到$t$的边,边权为最大收益,长度为原图从$s$到$t$的最短路 ...
- hiho 1483 区间计数问题+二分答案
链接:http://hihocoder.com/problemset/problem/1483 题意:一个区间价值为区间中相同数的对数..求第k大区间 思路:和51nod上一个第k大区间类似,二分答案 ...
- [BZOJ4556][TJOI2016HEOI2016]字符串(二分答案+后缀数组+RMQ+主席树)
4556: [Tjoi2016&Heoi2016]字符串 Time Limit: 20 Sec Memory Limit: 128 MB Submit: 1360 Solved: 545 ...
最新文章
- html语言星号,如何使HTML代码,输入的东西星号显示出来
- 阳光与阴谋:从投资者角度看理财周报-赛迪事件
- 石墨烯区块链(2)核心功能
- 图形—9patch,shape ,selector
- 如何使用 C# 中的 ValueTask
- poj2516Minimum Cost
- eddystone_超级计算机上的Linux,Google的Eddystone和更多新闻
- java singletonlist_Java Collections singletonList()方法及示例
- git使用的基本流程_我并不是高冷(Git进行中01):git基本流程简介
- 真正的免费云时代来临,免费1T全能空间
- 营业执照生成_电子营业执照如何获取?
- java基础语法笔记
- 详解数据库三大范式、BCNF范式
- webp是什么文件格式?
- 漫画:大公司病了,这也太形象了吧!!!
- 神经网络模型如何应用到实际 - 神经网络模型数学建模案例
- 3.15曝光智能骚扰产业链,连你月收入也知道!网易专家支招用户如何避免被“鱼肉”
- JDK1.8(jdk8)的下载与安装
- matlab的estimate函数,matlab的estimate函数输出值什么意思 [fit3 varcov logL info]=estimate(mdl,a)...
- java程序设计计算机二级,计算机二级Java程序设计真题及答案