Pagini recente » Cod sursa (job #2162861) | Cod sursa (job #357013) | Cod sursa (job #1486608) | Cod sursa (job #326218) | Cod sursa (job #1703404)
#include <iostream>
#include <fstream>
#define maxim 200005
using namespace std;
int BinarySearch ( long 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 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 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 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;
}