Pagini recente » Cod sursa (job #2103768) | Cod sursa (job #1974853) | Cod sursa (job #1350871) | Cod sursa (job #2511264) | Cod sursa (job #1161943)
#include<fstream>
#include<set>
#include<string.h>
#include<map>
using namespace std;
ifstream f("zeap.in");
ofstream g("zeap.out");
map<int,int >Dif;
string sir;
set < int > Q;
int n;
set<int >::iterator st,mid,dr;
void inserare( int x ){
if(Q.find(x)!=Q.end())
return ;
if(Q.empty()){
Q.insert(x);
return ;
}
Q.insert(x);
st=dr=mid=Q.find(x);
++dr;
if( mid==Q.begin() )
{
++Dif[*dr-*mid];
return ;
}
--st;
if( dr== Q.begin ()){
++Dif[*mid-*st];
return;
}
--Dif[*dr-*st];
if(Dif[*dr*-*st]==0)
Dif.erase(*dr-*st);
++Dif[*dr-*mid];
++Dif[*mid-*st];
}
int sterge( int x )
{
st=dr=mid=Q.find(x);
if( mid==Q.end() )
{
return -1;
}
++dr;
if(mid==Q.begin() && dr==Q.end())
{
Q.erase(mid);
return 0;
}
if(mid==Q.begin())
{
--Dif[*dr-*mid];
if(Dif[*dr-*mid]==0)
Dif.erase(*dr-*mid);
return 0;
}
st--;
if( dr==Q.end() )
{
--Dif[*mid-*st];
if(Dif[*mid-*st]==0)
Dif.erase(*mid-*st);
return 0;
}
--Dif[*dr-*mid];
if(Dif[*dr-*mid]==0)
Dif.erase(*dr-*mid);
--Dif[*mid-*st];
if(Dif[*mid-*st]==0)
Dif.erase(*mid-*st);
++Dif[*dr-*st];
return 0;
}
bool cauta ( int x )
{
mid=Q.find(x);
return (mid!=Q.find(x));
}
int dmax()
{
if(Q.size()<2)
return -1;
int x=*Q.rbegin();
int y=*Q.begin();
return x-y;
}
int dmin ()
{
if(Dif.empty())
return -1;
return (*Dif.begin()).first;
}
int numar ()
{
int nr=0;
for(int i=2;i<sir.size();++i)
{
nr=nr*10+(sir[i]-'0');
}
return nr;
}
int main () {
while(getline(f,sir)){
if(sir=="MIN")
{
g<<dmin()<<"\n";
continue;
}
if(sir=="MAX"){
g<<dmax()<<"\n";
continue;
}
if(sir[0]=='I'){
n=numar();
inserare(n);
continue;
}
if(sir[0]=='S'){
n=numar();
if(sterge(n)==-1)
g<<-1<<"\n";
continue;
}
if(sir[0]=='C'){
n=numar();
g<<cauta(n)<<"\n";
continue;
}
}
return 0;
}