Cod sursa(job #1844648)

Utilizator wilson182Alexandrina Panfil wilson182 Data 10 ianuarie 2017 11:20:30
Problema Hashuri Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.27 kb
#include<bits/stdc++.h>
using namespace std;
struct nod{
	int val;
	nod *last, *next;
	nod(){
		val=0;
		last=next=NULL;
	}
};
nod *h[666020];
void add(nod* &a, int val){
	if(a==NULL){
		a=new nod;
		a->val=val;
		return;
	}
	nod* it=a;
	nod* b=new nod;
	for(; it->next; it=it->next) {
		if (it->val==val) return;
		if (it->val>val) {
			nod* p= it->next;
			p->next=b;
			b->last=p;
			it->last=b;
			b->val=val;
		}
	}
	
}
void remove(nod* &a, int val){
	if(a==NULL) return;
	if (a->val==val)
	{
	 a=a->next;
	 return;
	}
	if(a==NULL)return;
	nod* it=a;
	for(;it->next; it=it->next) 
	  if (it->val==val) {
	  	nod *u=it->last, *p=it->next;
	  	u->next=p;
	  	p->last=u;
	  	delete it;
	  	return;
	  }
}
int caut(nod* &a, int val){
	nod* it=a;
	if(it==NULL) return 0;
	if(a->val==val)return 1;
	for(;it->next; it=it->next) 
	  if (it->val==val) return 1;
	return 0;
}
int main(){
	freopen("hashuri.in", "r", stdin);
	freopen("hashuri.out", "w", stdout);
	int n, x, y, i;
	scanf("%d", &n);
//	for(i=0; i<=666013; i++) h[i]=NULL;
	while(n--){
		scanf("%d%d", &x, &y);
		if(x==1) {
			add(h[y%666013], y); 
			continue;
		}
		if(x==2) remove(h[y%666013], y); 
		if(x==3) printf("%d\n",caut(h[y%666013], y));
	}
	return 0;
}