#include #include using namespace std; int main() { int size, type, x, cur = 0; scanf("%d", &size); //vector arr; //vector col; vector> arr; for (int k = 0; k < size; ++k) { scanf("%d%d", &type, &x); if (type == 1) { //добавление int i = 0; bool flag = 0; int left = 0, right = cur - 1; if (cur == 0) { arr.push_back(pair (x, 1)); ++cur; } else { while (left <= right) { i = left + (right - left) / 2; if (arr[i].first < x) left = i + 1; else if (arr[i].first > x) right = i - 1; else if (arr[i].first == x) { ++arr[i].second; flag = 1; break; } } if (!flag) { if (arr[i].first <= x && i == cur - 1) { arr.push_back(pair (x, 1)); ++cur; } else if (arr[i].first > x && i == 0) { arr.insert(arr.begin(), pair (x, 1)); ++cur; } else if (arr[i].first <= x) { arr.insert(arr.begin() + i + 1, pair (x, 1)); ++cur; } else { arr.insert(arr.begin() + i, pair (x, 1)); ++cur; } } } } else if (type == 2) //удаление { int i = 0; int left = 0, right = cur - 1; while (left <= right) { i = left + (right - left) / 2; if (arr[i].first < x) left = i + 1; else if (arr[i].first > x) right = i - 1; else if (arr[i].first == x) { --arr[i].second; if (!arr[i].second) { arr.erase(arr.begin()+i); --cur; } break; } } } else if (type == 3) //подсчет кратных { int count = 0; for (int i = 0; i < cur; ++i) { if (arr[i].first%x == 0) { ++count; } } printf("%d\n", count); } /*for (int j = 0; j < cur; ++j) cout << arr[j].first << " "; cout << endl; for (int j = 0; j < cur; ++j) cout << arr[j].second << " "; cout << endl;*/ } //arr.clear(); return 0; }