Cod sursa(job #2808896)

Utilizator SeracovanuEdwardSeracovanu Edward SeracovanuEdward Data 25 noiembrie 2021 17:09:51
Problema Hashuri Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.31 kb
#include <bits/stdc++.h>
#define MOD 666013
using namespace std;
class prs{
private:
    FILE *fin;
    char *buff;
    int sp;
    char read_ch(){
    ++sp;
    if(sp==4096){
        sp=0;
        fread(buff,1,4096,fin);
    }
    return buff[sp];
    }
public:
    prs(const char *name){
    fin=fopen(name,"r");
    buff=new char[4096]();
    sp=4095;
    }
    prs& operator >> (int &n){
    char c;
    while(!isdigit(c=read_ch()));
    n=c-'0';
    while(isdigit(c=read_ch()))
        n=n*10+c-'0';
    return *this;
    }
};
FILE *g=fopen("hashuri.out","w");
vector <int> r[MOD+5];
int n,x,op;
static void adauga(int x){
int currentline=x%MOD;
r[currentline].push_back(x);
}
inline vector<int>::iterator gasire(int x){
int currentline=x%MOD;
for(vector <int>::iterator it=r[currentline].begin();it!=r[currentline].end();++it)
    if(*it==x)
        return it;
return r[currentline].end();
}
static void sterge(int x){
int currentline=x%MOD;
vector <int>::iterator it=gasire(x);
if(it!=r[currentline].end())
    r[currentline].erase(it);
}
int main()
{
    prs fin("hashuri.in");
    fin>>n;
    for(int i=0;i<n;++i){
        fin>>op>>x;
        if(op==1)adauga(x);
        else if(op==2)sterge(x);
        else fprintf(g,"%d\n",(gasire(x)==r[x%MOD].end()?0:1));
    }
}