Pagini recente » Cod sursa (job #1907017) | Cod sursa (job #2187996) | Cod sursa (job #1702823) | Cod sursa (job #2539211) | Cod sursa (job #2750015)
#include <iostream>
#include <cstring>
#include <fstream>
#include <vector>
using namespace std;
int minim( vector < int > &x ){
int minim;
minim = x[0];
for( int i = 0; i < x.size(); i++ ){
if( x[i] < minim ) minim = x[i];
}
return minim;
}
int maxim( vector < int > &x ){
int maxim;
maxim = -1;
for( int i = 0; i < x.size(); i++ ){
if( x[i] > maxim ) maxim = x[i];
}
return maxim;
}
int cautare( vector < int > &x, int nr ){
int ok = -1, j = -1;
for( int i = 0; i < x.size() && ok == -1; i++ ){
if( x[i] == nr ) {
ok = 1;
j = i;
}
}
return j;
}
void stergere( vector < int > &x, vector < vector < int > > &hash, int nr ){
int i = cautare(x,nr);
x[i] = x[ x.size()-1 ];
x.pop_back();
int j = -1;
for( int i = 0; i < hash[nr%666013].size() && j == -1; i++ ){
if( hash[nr%666013][i] == nr ) j = i;
}
hash[nr%666013][j] = hash[nr%666013][ hash[nr%666013].size()-1 ];
hash[nr%666013].pop_back();
}
int diferenta_minima ( vector < int > &x ){
if( x.size() > 1 ){
int d;
if( x[1] > x[0] ) d = x[1] - x[0];
else d = x[0] - x[1];
for( int i = 0; i < x.size(); i++ ){
for( int j = i+1; j < x.size(); j++ ){
if( x[i] > x[j] && x[i]-x[j] < d ) d = x[i]-x[j];
if( x[i] < x[j] && x[j]-x[i] < d ) d = x[j]-x[i];
}
}
return d;
}
else return -1;
}
int cautare_in_hash( vector < vector < int > > hash, int nr ){
int ok = 0;
for( int i = 0; i < hash[nr%666013].size() && ok ==0; i++ ){
if( hash[nr%666013][i] == nr ) ok = 1;
}
return ok;
}
int main(){
vector < int > x;
vector < vector < int > > hash;
for( int i = 0; i < 666013; i++ ){
hash.push_back(x);
}
string y;
ifstream fin("exemplu.in");
ofstream fout("zeap.out");
while( fin >> y ){
if( y == "I" ){
int z;
fin >> z;
if( cautare_in_hash(hash,z) == 0 ){
x.push_back(z);
hash[z%666013].push_back(z);
}
}
if( y == "S" ){
int z;
fin >> z;
if( cautare_in_hash(hash,z) != 0 ){
stergere( x, hash, z );
}
else fout << -1 << endl;
}
if( y == "C" ){
int z;
fin >> z;
if( cautare_in_hash(hash,z) != 0 ) fout << 1 << endl;
else fout << 0 << endl;
}
if( y == "MAX" ){
if( x.size() > 1 ){
fout << maxim(x) - minim(x) <<endl;
}
else fout << -1;
}
if( y == "MIN" ){
fout << diferenta_minima(x) << endl;
}
}
}