Pagini recente » Cod sursa (job #2568343) | Cod sursa (job #865408) | Cod sursa (job #2449356) | Cod sursa (job #2202848) | Cod sursa (job #500878)
Cod sursa(job #500878)
#include <stdio.h>
#include <set>
#define Nmax 300002
#define INF 2147000000
using namespace std;
set< int > Set_min;
set< int, greater<int> > Set_max;
int N;
char s[15];
inline int Minim(int x,int y){ return x<y ? x:y; }
inline void insereaza(int nr){
if( Set_min.find(nr) != Set_min.end() ) return;
Set_min.insert(nr);
Set_max.insert(nr);
}
inline void sterge(int nr){
if( Set_min.find(nr) != Set_min.end() ){
Set_min.erase(Set_min.find(nr));
Set_max.erase(Set_max.find(nr));
}
else printf("%d\n",-1);
}
inline void cauta(int nr){
if( Set_min.find(nr) != Set_min.end() )
printf("%d\n",1);
else printf("%d\n",0);
}
inline void max_dif(){
if( Set_max.empty() || Set_max.size()==1 ){
printf("%d\n",-1);
return;
}
printf("%d\n",*Set_max.begin()-*Set_min.begin());
}
inline void min_dif(){
int a,mn=INF;
if( Set_max.empty() || Set_max.size()==1 ){
printf("%d\n",-1);
return;
}
a=*Set_min.begin();
Set_min.erase(Set_min.begin());
mn=Minim(mn,*Set_min.begin()-a);
Set_min.insert(a);
a=*Set_max.begin();
Set_max.erase(Set_max.begin());
mn=Minim(mn,a-*Set_max.begin());
Set_max.insert(a);
printf("%d\n",mn);
}
int main(){
int i,nr;
freopen("zeap.in","r",stdin);
freopen("zeap.out","w",stdout);
while( !feof(stdin) ){
fgets(s,20,stdin);
nr=0;
for(i=0; s[i]>='A' && s[i]<='Z';) ++i;
for(++i; s[i]>='0' && s[i]<='9';) nr=nr*10+s[i]-'0',++i;
if(s[0]=='I') insereaza(nr);else
if(s[0]=='S') sterge(nr); else
if(s[0]=='C') cauta(nr); else
if(s[1]=='A') max_dif();else
if(s[1]=='I') min_dif();
memset(s,0,sizeof(s));
}
fclose(stdin); fclose(stdout);
return 0;
}