Pagini recente » Cod sursa (job #1466720) | Cod sursa (job #2409054) | Cod sursa (job #2871187) | Cod sursa (job #361319) | Cod sursa (job #462065)
Cod sursa(job #462065)
#include<iostream>
#include<fstream>
#include<algorithm>
using namespace std;
inline int cmp (int a, int b ) { return a<b ; }
int v[400000],op[400000],val[400000],maxa,mina,Min,n,q,sw[400000],lg,cont;
void insert ()
{
int nr1,nr2,i,j;
Min=2000000000;
nr1=-1;
for (i=1;i<=n;i++)
if (sw[i]==1)
if (nr1==-1)
{
nr1=v[i];
mina=nr1;
}
else
{
nr2=nr1;
nr1=v[i];
if (Min>nr1-nr2)
Min=nr1-nr2;
}
maxa=nr1;
}
void solve ()
{
int s,p,i;
ofstream g("zeap.out");
for (i=1;i<=q;i++)
{
s=0;
if (op[i]==1)
{
p=lg;
for (;p;p>>=1)
if (p+s<=n && v[s+p]<=val[i])
s+=p;
if (sw[s]==0)
{
sw[s]=1;
insert ();
++cont;
}
}
if (op[i]==2)
{
p=lg;
for (;p;p>>=1)
if (p+s<=n && v[s+p]<=val[i])
s+=p;
if (v[s]==val[i] && sw[s]==1)
{
sw[s]=0;
insert();
--cont;
}
else
g<<"-1\n";
}
if (op[i]==3)
{
p=lg;
for (;p;p>>=1)
if (p+s<=n && v[s+p]<=val[i])
s+=p;
if (v[s]==val[i] && sw[s]==1)
g<<"1\n";
else
g<<"0\n";
}
if (op[i]==4)
if (cont>=2)
g<<maxa-mina<<'\n';
else
g<<"-1\n";
if (op[i]==5)
if (cont>=2)
g<<Min<<'\n';
else
g<<"-1\n";
}
g.close();
}
void proces ()
{
int i,j;
sort (v+1,v+n+1,cmp);
j=0;
for (i=1;i<n;i++)
if (v[i]!=v[i+1])
v[++j]=v[i];
v[++j]=v[n];
n=j;
for (lg=1;lg<=n;lg<<=1);
lg>>=1;
}
void citire ()
{
int nr;
ifstream f("zeap.in");
char s[10];
n=0;
q=0;
while (f>>s)
{
if (strlen(s)==1)
{
f>>nr;
if (s[0]=='I')
{
v[++n]=nr;
op[++q]=1;
val[q]=nr;
}
if (s[0]=='S')
{
op[++q]=2;
val[q]=nr;
}
if (s[0]=='C')
{
op[++q]=3;
val[q]=nr;
}
}
else
{
if (s[1]=='A')
op[++q]=4;
else
op[++q]=5;
}
}
f.close();
}
int main()
{
citire ();
proces();
solve ();
return 0;
}