Pagini recente » Cod sursa (job #973235) | Cod sursa (job #697835) | Statistici Muresan Aurelian Paul (28121988) | Cod sursa (job #582807) | Cod sursa (job #1770619)
#include <iostream>
#include<fstream>
#include<string>
#include<algorithm>
using namespace std;
ifstream f("zeap.in");
ofstream g("zeap.out");
string str;
struct node
{
int mx,mn,mindif;
}arb[100005];
int v[300005],value,val,i,j,n,q,par[30005],num,newn;
int op[300005];
bool cauta;
int minn(int x,int y)
{
if(x<=0) return y;
if(y<=0) return x;
if(x<y) return x;
return y;
}
void update(int nod,int l,int r)
{
if(l==r)
{
if(value!=v[l])
{
if(cauta==1) g<<"0\n";
else g<<"-1\n";
return;
}
if(cauta==1)
{if(arb[nod].mn!=0)g<<"1\n";
else g<<"0\n";
return;}
if(arb[nod].mn==0&&val==0) {g<<"-1\n";return;}
arb[nod].mn=val;
arb[nod].mx=val;
return;
}
int m=(l+r)/2;
if(value<=v[m]) update(2*nod,l,m);
else update(2*nod+1,m+1,r);
if(cauta==0)
{
arb[nod].mx=max(arb[2*nod].mx,arb[2*nod+1].mx);
arb[nod].mn=minn(arb[2*nod].mn,arb[2*nod+1].mn);
arb[nod].mindif=minn(minn(arb[2*nod].mindif,arb[2*nod+1].mindif),arb[2*nod+1].mn-arb[2*nod].mx);
}
}
int main()
{
while(getline(f,str))
{
q++;
if(str[0]=='M')
{
if(str[1]=='A') op[q]=1;
else op[q]=2;
}
else
{
num=0;
for(j=2;j<str.size();j++)
num=num*10+str[j]-'0';
par[q]=num;
if(str[0]=='C') op[q]=3;
if(str[0]=='S') op[q]=4;
if(str[0]=='I') {op[q]=5;n++;v[n]=num;}
}
}
sort(v+1,v+n+1);
for(i=1;i<=n;i++)
{
if(v[i]!=v[i-1])
{
newn++;
v[newn]=v[i];
}
}
n=newn;
cauta=0;
for(i=1;i<=q;i++)
{
if(op[i]==1)
{
val=arb[1].mx-arb[1].mn;
if(arb[1].mx==0||arb[1].mx==arb[1].mn) val=-1;
g<<val<<'\n';
continue;
}
if(op[i]==2)
{
val=arb[1].mindif;
if(val==0) val=-1;
g<<val<<'\n';
continue;
}
if(op[i]==3)
{
cauta=1;
value=par[i];
val=0;
update(1,1,n);
cauta=0;
continue;
}
if(op[i]==4)
{
value=par[i];
val=0;
update(1,1,n);
continue;
}
val=par[i];value=par[i];
update(1,1,n);
}
return 0;
}