Алгоритмы(1657 задач)
Структуры данных(279 задач)
Интерактивные задачи(17 задач)
Другое(54 задач)
Напишите программу, переводящую запись числа между двумя произвольными системами счисления.
На вход программа получает три величины: \(n\), \(A\), \(k\), где \(n\) и \(k\) — натуральные числа от \(2\) до \(36\), основания системы счисления, \(A\) — число, записанное в системе счисления с основанием \(n\), \(A < 2^{31}\).
Необходимо вывести значение A в системе счисления с основанием k без лидирующих нулей.
Цифры записываются следующими символами: 0, 1, 2, ..., 9, A, B, C, ..., Z.
10 19 2
10011
10 32 3
1012
Реализуйте структуру данных, которая на данном массиве из N целых чисел позволяет узнать максимальное значение на этом массиве и индекс элемента, на котором достигается это максимальное значение.
В первой строке вводится натуральное число N (1 ≤ N ≤ 105) – количество элементов в массиве. В следующей строке содержатся N целых чисел, не превосходящих по модулю 109 – элементы массива. Далее идет число K (0 ≤ K ≤ 105) – количество запросов к структуре данных. Каждая из следующих K строк содержит два целых числа l и r (1 ≤ l ≤ r ≤ N) – левую и правую границы отрезка в массиве для данного запроса.
Для каждого из запросов выведите два числа: наибольшее значение среди элементов массива на отрезке от l до r и индекс одного из элементов массива, принадлежащий отрезку от l до r, на котором достигается этот максимум.
5 7 3 1 6 4 3 1 5 2 4 3 3
7 1 6 4 1 3
1 0 1 1 1
0 1
2 0 1 3 1 1 1 2 2 2
0 1 1 2 1 2
Отрезок целочисленной прямой длины N разбит на единичные отрезки, которые пронумерованы от 1 до N.
Их объединяют в группы по следующим правилам:
1. Несколько подряд идущих отрезков, ни один из которых не принадлежит ни одной из групп, могут быть объединены в группу.
2. Любая ранее созданная группа может быть уничтожена, при этом входившие в нее отрезки больше не относятся ни к какой группе и могут впоследствии быть отнесены к другим группам.
Видно, что любой отрезок всегда находится не более, чем в одной группе.
Каждую группу можно идентифицировать парой чисел: номером первого и номером последнего отрезка, входящего в группу.
Первоначально нет ни одной группы.
Первая строка входных данных содержит число N – количество отрезков и число K – количество запросов (1 ≤ N, K ≤105). Далее идет K строчек, содержащих запросы к структуре данных. Каждый запрос начинается с числа 1 (запрос на создание группы) или 2 (запрос на удаление группы). После числа 1 указывается два других числа l и r (1 ≤ l ≤ r ≤ N), после числа 2 указывается одно число i (1 ≤ i ≤ N).
Для каждого запроса типа 1 необходимо отрезки с номерами от l до r объединить в группу. Если все эти отрезки не входят ни в одну группу, запрос считается удачным и программа должна вывести 1. Если хотя бы один из этих отрезков уже относится к какой-то группе, запрос считается неудачным, объединение не производится и программа выводит 0.
Для каждого запроса типа 2 необходимо удалить группу, в которую входит отрезок с номером i, при этом программа должна вывести два числа: номер первого и последнего отрезка, входящих в удаляемую группу. Если отрезок с номером i не относится ни к одной группе, программа должна вывести два нуля.
Разбалловка для личной олимпиады
Тесты 1-1 — из условия. Оцениваются в 0 баллов.
Тесты 2-11 — n, q не превосходят 1000. Каждый тест оценивается в 7 баллов.
Тесты 13-27 — дополнительных ограничений нет. Группа тестов оценивается в 30 баллов, баллы начисляются только при прохождении всех тестов группы и всех тестов предыдущих групп. (вместе с предыдущими группами — 100 баллов).
5 6 1 1 2 1 4 5 1 2 4 2 5 2 1 2 4
1 1 0 4 5 1 2 0 0
Отсортируйте данный массив. Используйте пирамидальную сортировку.
Первая строка входных данных содержит количество элементов в массиве N, N ≤ 105. Далее задаются N целых чисел, не превосходящих по абсолютной величине 109.
Выведите эти числа в порядке неубывания.
В этой задаче вам необходимо организовать структуру данных Heap для хранения целых чисел, над которой определены следующие операции:
a) Insert(k) – добавить в Heap число k (1 ≤ k ≤ 1000000) ;
b) Extract достать из Heap наибольшее число (удалив его при этом).
В первой строке содержится количество команд N (1 ≤ N ≤ 100000), далее следуют N команд, каждая в своей строке. Команда может иметь формат: “0 <число>” или “1”, обозначающий, соответственно, операции Insert(<число>) и Extract. Гарантируется, что при выполенении команды Extract в структуре находится по крайней мере один элемент.
Для каждой команды извлечения необходимо отдельной строкой вывести число, полученное при выполнении команды Extract.
2 0 10000 1
10000