Pagini recente » Cod sursa (job #547189) | Cod sursa (job #2238531) | Cod sursa (job #1220174) | Autentificare | Cod sursa (job #306857)
Cod sursa(job #306857)
#include<stdio.h>
#include<string.h>
#define N 100010
int n,nr;
int mar[N],spatiu[N+N],*v=spatiu+N,mc;
char c[N],*c1=c+2;
char *a[N];
char cmp(int x)
{
if(mc<mar[x])
return -1;
if(mc>mar[x])
return 1;
for(int i=0; i<mc; ++i)
{
if(c1[i]!=a[x][i])
{
if(c1[i]<a[x][i])
return -1;
return 1;
}
}
return 0;
}
int caut()
{
int p=1,u=nr;
while(p<u)
{
int m=(p+u)>>1;
if(cmp(v[m])!=1)
u=m;
else
p=m+1;
}
if(cmp(v[p])==-1)
--p;
if(cmp(v[p])==0)
return -1;
return p;
}
inline void baga()
{
int i;
for(i=0; c1[i]>='0' && c1[i]<='9'; ++i)
;
mc=i;
if(nr==0)
{
++nr;
mar[nr]=mc;
a[nr]=new char[mc+3];
memcpy(a[nr],c1,mc);
a[nr][mar[nr]]=0;
v[1]=nr;
return;
}
if(cmp(v[1])==-1)
{
++nr;
--v;
mar[nr]=mc;
a[nr]=new char[mc+3];
memcpy(a[nr],c1,mc);
a[nr][mar[nr]]=0;
v[1]=nr;
return;
}
int aux=caut();
if(aux==-1)
return;
++nr;
mar[nr]=mc;
a[nr]=new char [mc+3];
memcpy(a[nr],c1,mc);
a[nr][mar[nr]]=0;
int m=(nr-1)>>1;
if(aux>=m)
{
for(int i=nr-1; i>aux; --i)
v[i+1]=v[i];
v[aux+1]=nr;
}
else
{
for(int i=1; i<=aux; ++i)
v[i-1]=v[i];
v[aux]=nr;
--v;
}
}
int main()
{
freopen("nums.in","r",stdin);
freopen("nums.out","w",stdout);
scanf("%d\n",&n);
for(; n; --n)
{
fgets(c,N,stdin);
if(c[0]=='1')
baga();
else
{
int aux=0;
for(int i=2; c[i]>='0' && c[i]<='9'; ++i)
aux=aux*10+c[i]-'0';
fputs(a[v[aux]],stdout);
fputc('\n',stdout);
}
}
/*printf("\n\n");
for(int i=1; i<=nr; ++i)
{
fputs(a[v[i]],stdout);
fputc('\n',stdout);
}*/
return 0;
}