Cod sursa(job #1703402)

Utilizator cami9719Camelia Hanes cami9719 Data 16 mai 2016 21:21:36
Problema Hashuri Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 2.02 kb
#include <iostream>
#include <fstream>
#define maxim 100005
using namespace std;

int BinarySearch ( long lungime, long long sir[maxim], long long x, long st, long dr ){
if(st > dr )
    return 0;
else{
    long mid = (st+dr)/2;
    if(sir[mid] == x)
        return mid;
    else{
        if(x<sir[mid])
            return BinarySearch(lungime, sir, x, st, mid-1);
        else
            return BinarySearch(lungime, sir, x, mid+1, dr);
    }
}
}

void ADD_ ( long& lungime, long long sir[maxim], long long x ){
lungime ++;
sir[lungime] = x;
int j = lungime;
int i = lungime/2;
while(i>1 && sir[i] < sir[j] ){
    swap(sir[i], sir[j]);
    j=i;
    i/=2;
}
}

void DELETE_ ( long& lungime, long long sir[], long poz ){
   long i = poz; long j = poz*2;
  sir[poz] = sir[lungime];
  lungime--;
  int ok;
  while( j<lungime ){
    if( sir[i] > sir[j] && sir[i] > sir[j+1] )
        return ;
    else{
        if( sir[j] > sir[j+1]){
            swap( sir[i], sir[j]);
            ok=1;
        }else{
        swap(sir[i], sir[j+1]);
        ok=2;
        }
        if( ok==1 ){
            i = j;
            j = 2*i;
        }else{
        i=j+1;
        j=2*i;
        }
    }
  }
}

int main()
{
    ifstream f("hashuri.in");
    ofstream g("hashuri.out");
    long N, lungime = 0;
    long long sir[maxim];
    f >> N;
    int k;
    long long x;
    for ( long i = 1; i<= N; i++ ){
        f >> k >> x;
        if( k == 1){
            if( BinarySearch(lungime, sir, x, 1, lungime)==0 ){
                ADD_(lungime, sir, x);
            }
        }else{
        if( k==2 ){
                int p = BinarySearch(lungime, sir, x, 1, lungime);
            if ( p!=0 ){
                DELETE_(lungime, sir, p);
            }
        }else{
        if( k==3 ){
                if (BinarySearch(lungime, sir, x, 1, lungime))
           g << "1" <<"\n";
        else
            g <<"0 \n";
        }
        }
        }
    }
    f.close();
    g.close();
    return 0;
}