标签:style http color io os ar for sp on
UVA501 - Black Box(vector + lower_bound)
题目大意:给你两种操作:Add num,将一个数加入黑盒子中,原本的黑盒子是空的。并且X = 0.Get
就是把X自增1,然后取出第X小的数。题目给的u序列的意思是在第Ui个数加入黑盒子后然后执行get操作。
解题思路:用vector来存放,这样能够实现随机取出第i小的数。然后用lower_bound函数来查找出比这个数大于等于的第一个数的位置,将这个数插入这个位置,复杂度n?log(n),再用insert插入到vector的对应的位置。
代码:
#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std;
typedef long long ll;
const int maxn = 3e4 + 5;
vector<ll> v;
vector<ll>::iterator it;
int n, m;
ll num[maxn];
int op;
int main () {
int T;
scanf ("%d", &T);
while (T--) {
scanf ("%d%d", &n, &m);
for (int i = 0; i < n; i++)
scanf ("%lld", &num[i]);
v.clear();
int dex = 0;
for (int i = 0; i < m; i++) {
scanf ("%d", &op);
while (dex < op) {
it = lower_bound(v.begin(), v.end(), num[dex]);
if (it != v.end())
v.insert(it, num[dex++]);
else
v.push_back(num[dex++]);
}
printf ("%lld\n", v[i]);
}
if (T)
printf ("\n");
}
return 0;
}
UVA501 - Black Box(vector + lower_bound)
标签:style http color io os ar for sp on
原文地址:http://blog.csdn.net/u012997373/article/details/39519107