Cod sursa(job #2908441)

Utilizator CReaper1116Shang Cheng Lin CReaper1116 Data 3 iunie 2022 15:40:04
Problema Hashuri Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.33 kb
#include <fstream>
#include <vector>
#include <algorithm>
#include <unordered_set>

using namespace std;
ifstream fin("hashuri.in");
ofstream fout("hashuri.out");

#define MOD 666013

vector<int> h[MOD];
unordered_set<int> mySet;

int f(int x) {
     return x % MOD;
}

bool cauta(int x) {
     int nr = f(x);
     int i = 0;
     while(i < h[nr].size() && h[nr][i] != x)i++;
     if(i < h[nr].size())return 1;
     else return 0;
}
bool cauta2(int x) {
     if (mySet.find(x) == mySet.end())
          return 0;
     return 1;
}

void adauga(int x) {
     if(cauta(x) == 0){
          int nr = f(x);
          h[nr].push_back(x);
     }
}
void adauga2(int x) {
     mySet.insert(x);
}

void sterge(int x) {
     int i = 0,nr = f(x);
     while(i < h[nr].size() && h[nr][i] != x){
          i++;
     }
     if(i < h[nr].size()){
          swap(h[nr][i],h[nr].back());
          h[nr].pop_back();
     }
}
void sterge2(int x) {
     auto it = mySet.find(x);
     if (it != mySet.end())
          mySet.erase(it);
}

int main()
{
     int n,i,cer,nr;
     fin>>n;
     for(i = 0;i < n;i++){
          fin>>cer>>nr;
          if(cer == 1){
               adauga2(nr);
          }else if(cer == 2){
               sterge2(nr);
          }else fout<<cauta2(nr)<<'\n';
     }
     return 0;
}