Cod sursa(job #1170976)

Utilizator AndreiBarbutaAndrei Barbuta AndreiBarbuta Data 14 aprilie 2014 22:35:52
Problema Hashuri Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.48 kb
#include <cstdio>
#include <algorithm>
using namespace std;

int v[500000],h;
void adauga(int y, int &h)
{
    int st,dr,med,ok=0;
    st=1;
    dr=h;
    while(st<=dr){
        med=dr+(st-dr)/2;
        if(v[med]==y)
            ok=1;
        if(y>v[med])
            st=med+1;
        else
            dr=med-1;
    }
    if(ok==0){
        h++;
        v[h]=y;
    }

}
void stergere(int y, int &h)
{
    int st,dr,med,i;
    st=1;
    dr=h;
    while(st<=dr){
        med=dr+(st-dr)/2;
        if(v[med]==y){
            for(i=med;i<=h;i++)
                v[i]=v[i+1];
            h--;
            break;
        }
        if(y>v[med])
            st=med+1;
        else
            dr=med-1;
    }
}
void afis(int y)
{
    int st,dr,med,ok=0;
    st=1;
    dr=h;
    while(st<=dr){
        med=dr+(st-dr)/2;
        if(v[med]==y){
            ok=1;
            printf("1\n");
        }
        if(y>v[med])
            st=med+1;
        else
            dr=med-1;
    }
    if(ok==0)
        printf("0\n");
}
int main()
{
    freopen("hashuri.in","r",stdin);
    freopen("hashuri.out","w",stdout);
    int n,x,y,i;
    scanf("%d",&n);
    for(i=1;i<=n;i++){
        scanf("%d%d",&x,&y);
        sort(v+1,v+h+1);
        if(x==1){
            adauga(y,h);
            continue;
        }
        if(x==2){
            stergere(y,h);
            continue;
        }
        if(x==3)
            afis(y);
    }
    return 0;
}