Pagini recente » Cod sursa (job #94819) | Cod sursa (job #421117) | Cod sursa (job #2812283) | Cod sursa (job #385294) | Cod sursa (job #919284)
Cod sursa(job #919284)
#include<fstream>
#include<cstdio>
#define mod 300007
using namespace std;
#ifndef __LIST__H
#define __LIST__H
template <typename T>class Node {
public:
T value;
Node<T> *next;
Node<T> *prev;
Node(){
next=prev=NULL;
}
};
template <typename T>class LinkedList{
private:
Node<T> *pFirst;
public:
//Constructor
LinkedList(){
pFirst=new Node<T>;
pFirst=NULL;
}
//Destructor
~LinkedList(){
while(!isEmpty())
removeFirst();
delete pFirst;
}
/*Adauga un nod cu valoarea == value la inceputul listei */
void addFirst(T value){
Node<T> *p=new Node<T>;
p->value=value;
p->next=pFirst;
if(pFirst!=NULL)
pFirst->prev=p;
pFirst=p;
}
/*Adauga un nod cu valoarea == value la sfarsitul listei */
/*Elimina elementul de la inceputul listei si intoarce valoarea acestuia*/
T removeFirst(){
Node<T> *p=new Node<T>;
T aux;
aux=pFirst->value;
p=pFirst->next;
if(p!=NULL)
p->prev=NULL;
delete pFirst;
pFirst=p;
return aux;
}
/*Elimina elementul de la sfarsitul listei listei si intoarce valoarea acestuia*/
/*Elimina prima aparitie a elementului care are valoarea == value*/
T removeFirstOccurrence(T value){
Node<T> *p=new Node<T>;
T aux;
p=findFirstOccurrence(value);
if(p==NULL) return 0;
if(p==pFirst) removeFirst();
else{
aux=p->value;
if(p->prev!=NULL)
p->prev->next=p->next;
if(p->next!=NULL)
p->next->prev=p->prev;
delete p;
}
return aux;
}
/*Elimina ultima aparitie a elementului care are valoarea == value*/
/*Intoarce prima aparitie a elementului care are valoarea == value, NULL daca nu exista*/
Node<T>* findFirstOccurrence(T value){
Node<T> *p=new Node<T>;
p=pFirst;
for(;p;p=p->next)
if(p->value==value)
return p;
return NULL;
}
/*Intoarce ultima aparitie a elementului care are valoarea == value, NULL daca nu exista*/
/*Intoarce 1 daca lista este vida, 0 altfel*/
int isEmpty(){
return (pFirst==NULL);
}
};
#endif
#include<set>
set<int>v[mod];
//LinkedList<int>v[mod];
int main(){
int k,x,n;
ifstream f;
f.open("hashuri.in");
freopen("hashuri.out","w",stdout);
f>>n;
for(int i=1;i<=n;++i){
f>>k>>x;
switch(k){
case 1: v[x%mod].insert(x); break;
case 2: v[x%mod].erase(x);break;
case 3: printf("%d\n",v[x%mod].find(x)!=v[x%mod].end()?1:0);break;
}
}
f.close();
return 0;
}