Где мой неправильный подход в моем коде?
Какова правильная идея проблемы?
Ссылка на проблему:
https://vjudge.net/problem/HackerRank-cpp-sets
Формат ввода:
Первая строка ввода содержит где число запросов. Следующие строки содержат запрос каждый. Каждый запрос состоит из двух целых чисел, а где - тип запроса и является целым числом.
Ограничения:
1 <= Q <= 10 ^ 15 </p>
1 <= y <= 3 </p>
1 <= x <= 10 ^ 9 </p>
Формат вывода:
Для запросов тип 3 выведите «Yes» (без кавычек), если число x присутствует в наборе, а если число отсутствует, то выведите «No» (без кавычек). Каждый запрос типа 3 должен быть напечатан в новой строке.
Решить:
#include <bits/stdc++.h>
using namespace std;
int main() {
int q, y, i, x, e = 0, a[1000], c1 = 0, d = 0, b;
set<pair<int, int>> m;
set<pair<int, int>>::iterator it;
cin >> q; // the number of queries
for (i = 1; i <= q; i++) {
cin >> y; // y is the type of the query
cin >> x; // x is a integer
m.insert(make_pair(y, x));
if (y == 3) {
d++; // d is the total number of type 3
}
}
for (it = m.begin(); it != m.end(); it++) {
b = it->first;
if (b == 3) {
a[e] = it->second; // e is position of the type 3's value is a new array
e++;
}
}
for (e = 0; e < d; e++) {
for (it = m.begin(); it != m.end(); it++) {
b = it->first;
if (b < 3) {
if (a[e] == it->second) {
c1++; // c1 is the counter of the existing type 3's value in the set
}
}
}
if (c1 > 0) {
cout << "Yes" << endl;
} else if (c1 == 0) {
cout << "No" << endl;
}
c1 = 0;
}
}