10. Уникальные посетители

☰ Теория

Множество HashSet<T>

Что хранит. Хранит разные значения: каждый элемент присутствует не более одного раза. Порядок элементов не гарантирован.

Для чего используют. Подходит для уникальных посетителей, списка допуска и проверки, встречался ли идентификатор раньше.

Основные операции

Запись на C#Назначение
s.Add(x)Добавить x; true, если добавлен новый элемент, иначе false.
s.Contains(x)Проверить наличие x.
s.Remove(x)Удалить x; false, если элемента не было.
s.CountЧисло разных элементов.
foreach (int x in s)Перебрать элементы без гарантии порядка.

Пример

Для примера нужны using System; и using System.Collections.Generic;. Код выполняется внутри Main.

HashSet<int> ids = new HashSet<int>();
ids.Add(7);
ids.Add(9);
ids.Add(7);                    // Повтор не создаёт новый элемент.
Console.WriteLine(ids.Count);
Console.WriteLine(ids.Contains(9));
ids.Remove(9);
Console.WriteLine(ids.Contains(9));

Вывод:

2
True
False

Важно. Множество не хранит количество повторений и не предоставляет доступ по индексу. Для вывода по возрастанию создайте List<int> из множества и вызовите Sort().

Для этой задачи

  • Запрос. Contains не добавляет идентификатор и не меняет число разных посетителей.

В журнале посещений один пользователь может встречаться много раз. Найдите число разных пользователей. Затем для каждого указанного идентификатора определите, есть ли он в исходном журнале. Запросы журнал не меняют.

Входные данные

Первая строка содержит n и q. Вторая — n идентификаторов посетителей; при n = 0 она пустая. Затем идут q строк с одним идентификатором для запроса.

Выходные данные

В первой строке выведите число разных посетителей. Для каждого запроса выведите YES, если пользователь встречался, иначе NO.

Не выводите приглашения к вводу и пояснения. Служебные слова в ответах пишите в указанном регистре.

Ограничения

0 ≤ n, q ≤ 100000; идентификаторы от 1 до 10⁹.

Примеры
Входные данныеВыходные данные
1
6 4
7 9 7 11 9 7
7
8
11
8
3
YES
NO
YES
NO
2
0 2

1
1
0
NO
NO

Напишите программу
Auto
       

time 3000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам