Cod sursa(job #462065)

Utilizator Andreid91Ciocan Andrei Andreid91 Data 9 iunie 2010 17:48:09
Problema Zeap Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.02 kb
#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;
}