小马和她的操作系统考试
该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。
Description
临近考试周,小马正在复习操作系统的内存分配算法。小马对内存分配算法中的最佳适应算法特别感兴趣,关于最佳适应算法的定义如下:
- 最佳适应算法(best-fit):从全部空闲区中找出能满足作业要求的,且大小最小的空闲分区,这种方法能使碎片尽量小。
假设我们现在有三个内存大小分别为 \(1, \ 3, \ 5\) 的空闲分区,现在有一个大小为 \(2\) 的作业想要被分配内存,最佳适应算法需要找到一个内存大于等于 \(2\) 的并且最小的的空闲分区来分配这个作业,自然选择内存大小为 \(3\) 的空闲分区,内存大小为 \(3\) 的空闲分区被大小为 \(2\) 的作业占用后,还剩大小为 \(1\) 的内存,所以三个空闲分区的内存大小变成了 \(1, \ 1, \ 5\)。
现在给出 \(n\) 个内存大小为 \(a_i\)(\(1 \leq i \leq n\))的空闲分区,依次有 \(m\) 个大小为 \(b_i\) (\(1 \leq i \leq m\))的作业需要被分配,请帮助小马计算一下每个作业被分配到下标为多少的空闲分区,如果该作业不能被分配,则输出 \(-1\)。
tip:如果有两个空闲分区内存相等,优先选取下标小的。
Format
Input
第一行输入两个正整数 \(n\),\(m\),表示空闲分区和作业的个数。
第二行输入 \(n\) 个正整数,第 \(i\) 个数字 \(a_i\) 的大小表示第 \(i\) 个空闲分区的大小。
第三行输入 \(m\) 个正整数,第 \(i\) 个数字 \(b_i\) 的大小表示第 \(i\) 个作业的大小。
\(50\%\) 的数组保证,\(1 \leq n,\ m \leq 3000\),\(1 \leq a_i,\ b_i \leq 10^5\)
\(70\%\) 的数组保证,\(1 \leq n,\ m \leq 10^4\),\(1 \leq a_i,\ b_i \leq 10^9\)
\(100\%\) 的数组保证,\(1 \leq n,\ m \leq 10^5\),\(1 \leq a_i,\ b_i \leq 10^9\)
Output
输出 \(m\) 个正整数,第 \(i\) 个正整数表示第 \(i\) 个作业被分配到对应数字下标的空闲分区里。
数字和数字之间用空格分开。
Sample 1
Input
2 3
50 100
51 50 50
Output
2 1 -1
Limitation
1s, 1024KiB for each test case.