Cod sursa(job #1705955)

Utilizator cami9719Camelia Hanes cami9719 Data 21 mai 2016 09:44:15
Problema Hashuri Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 2.39 kb
#include <iostream>
#define eps 0.000001
#include <cmath>
#include <fstream>
#define maxim 1000000
using namespace std;

ifstream f("hashuri.in");
ofstream g("hashuri.out");

struct vect_ {
long long v[1000];
long long nrElem;
};

/*double radical ( double x ){
    if ( x< 0 )
        return -1;
double a, b;
if ( x > 0 && x< 1){
    a = x;
    b = 1;
}else{
    a = 1;
    b = x;
}
double mid;
while ( b-a >= eps ){
    mid = ( a+b )/2;
    if ( (a*a - x) * ( mid * mid - x ) <= 0 ){
        b = mid;
    }else
    a = mid;
}
return mid;
}
*/


void IncarcaVector ( long long M, vect_ W[] ){
for ( int i = 0; i< M; i++ ){
    W[i].nrElem = 0; //numarul initial de elemente este 0;
}
}

void inserareElementVector ( long long& lungime, long long v[1000], long long element ){
if ( lungime == 0 ) {
    v[lungime] = element;
    lungime ++;
}else{
int i = lungime-1; lungime ++;
while ( element <= v[i] ){
    v[i+1] = v[i];
    i--;
}
v[i+1] = element;
}
}

long BinarySearch ( long long lungime, long long v[1000], int st, int dr, long long x ){
    if ( st > dr )
        return -1;
    else{
        int mij = ( st + dr ) / 2;
        if ( x == v[mij] )
            return mij;
        else{
            if ( x < v[mij] )
                return BinarySearch(lungime, v, st, mij-1, x);
            else
                return BinarySearch(lungime, v, mij+1, dr, x );
        }
    }
}


void stergeElementSir ( long long& lungime, long long sir[1000], long long x ){
long long poz  = BinarySearch(lungime, sir, 0, lungime-1, x);
if ( poz == -1 )
    return ;
for ( long long i = poz; i < lungime-1; i++ )
    sir[i] = sir[i+1];
lungime --;
}

int main()
{
    long long n;
    f >> n;
    long long M = sqrt(n) + 1;
    vect_ W[M+1];
    IncarcaVector(M, W);
long long op, numar;
for ( int p  = 1; p <=n; p ++ ){
    f >> op >> numar;
    if ( op == 1) {
        if ( BinarySearch(W[numar%M].nrElem, W[numar%M].v, 0, W[numar%M].nrElem-1, numar) == -1)
            inserareElementVector(W[numar%M].nrElem, W[numar%M].v, numar);
    }
    if ( op == 2 ){
        stergeElementSir(W[numar%M].nrElem, W[numar%M].v, numar);
    }
    if ( op == 3 ){
        if ( BinarySearch(W[numar%M].nrElem, W[numar%M].v, 0, W[numar%M].nrElem-1, numar) != -1 )
            g << "1 \n";
        else
            g <<"0 \n";
    }
}
    return 0;
}