Upper bound
На вход подаются N
целых чисел, а также набор из M
запросов, каждый из которых — целое число. Ваша задача — для каждого запроса найти количество чисел из исходного набора, меньших либо равных заданному в запросе числу. Использовать встроенные функции бинарного поиска запрещено.
Входные данные
Первая строка содержит число N
— количество элементов в массиве. (1⩽N⩽250000)
.
Вторая строка содержит N
целых чисел Ai
через пробел. (−109⩽Ai⩽109)
.
Третья строка содержит число M
— количество запросов. (1⩽M⩽250000)
.
Четвёртая строка содержит M
целых чисел Qi
через пробел. (−109⩽Qi⩽109)
.
Выходные данные
Выведите единственную строку с M
целыми числами — количествами чисел исходного массива, меньших либо равных соответствующему запросу.
ВВОД:
5
1 5 3 2 1
2
4 3
ВЫВОД:
4 4
C/C++
Задача на с++
Пример кода:
#include
#include
#include
using namespace std;
int main() {
int n, m;
cin >> n;
vector a(n);
for (int i = 0; i < n; i++) {
cin >> a[i];
}
sort(a.begin(), a.end());
cin >> m;
for (int i = 0; i < m; i++) {
int q;
cin >> q;
auto it = upper_bound(a.begin(), a.end(), q);
cout
#include
#include
using namespace std;
int main() {
size_t n;
cin >> n;
vector a(n);
for (auto& x : a) cin >> x;
size_t m;
cin >> m;
vector q(m);
for (auto& x : q) cin >> x;
vector box(m);
for (auto& s : box) {
for (auto x : q) {
size_t k = 0;
for (auto t : a) if (t
Встроенные запрещены - так напиши свою функцию бинарного поиска. Читал алгоритмы-то?
Вот так, например:
Вот так, например:
#include
using namespace std;
unsigned inspoint(const long *a, const unsigned len, const long v) {
unsigned lo = 0, hi = len - 1;
if (a[hi] == v) return hi;
if (a[hi] < v) return len;
while (lo + 1 < hi) {
const unsigned med = (lo + hi) / 2;
(a[med] > n;
long *a = new long[n];
cin >> a[0];
for (unsigned i = 1; i < n; i++) {
long v;
cin >> v;
unsigned ip = inspoint(a, i, v);
for (unsigned j = i; j > ip; j--) {
a[j] = a[j - 1];
}
a[ip] = v;
}
unsigned m;
cin >> m;
const char *sep = "";
while (m--) {
long q;
cin >> q;
unsigned ip = inspoint(a, n, q);
cout
Omer Kanat
Хотя, там ошибка в поиске точной границы, если есть одинаковые элементы. Лучше так (часть 1):
#include
using namespace std;
unsigned inspoint(const long *a, const unsigned len, const long v) {
unsigned lo = 0, hi = len - 1;
if (a[hi] < v) return len;
while (lo < hi) {
const unsigned med = (lo + hi) / 2;
const bool less = a[med] < v;
(less ? lo : hi) = med + less;
}
return lo;
}
Omer Kanat
Часть 2:
int main() {
unsigned n;
cin >> n;
long *a = new long[n];
cin >> a[0];
for (unsigned i = 1; i < n; i++) {
long v;
cin >> v;
unsigned ip = inspoint(a, i, v);
for (unsigned j = i; j > ip; j--) {
a[j] = a[j - 1];
}
a[ip] = v;
}
unsigned m;
cin >> m;
const char *sep = "";
while (m--) {
long q;
cin >> q;
unsigned ip = inspoint(a, n, q + 1);
cout
Похожие вопросы
- Решите задачу на любом языке. Желательно на с++.
- Задачу написать на с++ , она не сложная но почему то не получается напишите задачу с помощью цикла
- Решите задачу на с++, или хотя бы скажите идею как это вообще решать пожалуйста.
- Решите задачу на любом языке, или хотя бы скажите идею как это вообще решать пожалуйста.
- СРОЧНО! Помогите с задачей.
- Помогите с кодом задачи c++. задача на фото
- Задача по программированию. Решить на Python или C++
- Помогите решить задачу по программированию на C++
- Можете подсказать по задаче или дать алгоритм задачи, код опять же не нужен
- Решите, пожалуйста, задачу на c++
Так и думал, что вставка в массив производительность убьёт. Надо было мне через деревья делать...
Но автору, похоже, по барабану. Он лайкнул ответ от нейросети, где используется "запрещённый" бинарный поиск из STL. Нейросеть не читает условий.