Pagini recente » Cod sursa (job #1016292) | Cod sursa (job #2330362) | Cod sursa (job #2565492) | Cod sursa (job #2598808) | Cod sursa (job #625288)
Cod sursa(job #625288)
#include<cstdio>
#include<cstring>
struct Nod
{
int nrc;
Nod *f[10];
Nod()
{
for(int i=0;i<10;i++)
f[i]=false;
nrc=0;
}
};
const int N=25005;
int pp,n,len,pi[4*N],pf[4*N],s[4*N];
bool ok;
char str[4*N];
void updateai(int nod,int val)
{
s[nod]++;
if(pi[nod]==pf[nod])
return;
if(pi[2*nod]<=val && val<=pf[2*nod])
updateai(2*nod,val);
else
updateai(2*nod+1,val);
}
void init()
{
int m;
pi[1]=1;
pf[1]=25000;
for(int i=1;i<4*N;i++)
if(pi[i]!=pf[i])
{
m=(pi[i]+pf[i])/2;
pi[2*i]=pi[i];
pf[2*i]=m;
pi[2*i+1]=m+1;
pf[2*i+1]=pf[i];
}
}
bool verif(Nod *nod,int poz)
{
if(poz==len)
return true;
if(nod->f[str[poz]-'0'])
return verif(nod->f[str[poz]-'0'],poz+1);
return false;
}
void insert(Nod *nod,int poz)
{
++nod->nrc;
if(poz==len)
return;
if(nod->f[str[poz]-'0'])
{
insert(nod->f[str[poz]-'0'],poz+1);
return;
}
nod->f[str[poz]-'0']=new Nod();
insert(nod->f[str[poz]-'0'],poz+1);
}
int searchai(int nod,int val)
{
if(pi[nod]==pf[nod])
return nod;
if(val<=s[2*nod])
return searchai(2*nod,val);
return searchai(2*nod+1,val-s[2*nod]);
}
int sumaai(int nod,int val)
{
if(pi[nod]==pf[nod])
return 0;
if(val>s[2*nod])
return s[2*nod]+sumaai(2*nod+1,val-s[2*nod]);
return sumaai(2*nod,val);
}
void search(Nod *nod,int ord)
{
for(int i=0;i<10;i++)
if(nod->f[i])
{
if(pp+nod->f[i]->nrc<ord)
{
pp+=nod->f[i]->nrc;
continue;
}
ok=true;
if(ok==true)
printf("%d",i);
search(nod->f[i],ord);
return;
}
}
void read()
{
freopen("nums.in","r",stdin);
freopen("nums.out","w",stdout);
int op,poz;
scanf("%d",&n);
Nod *first[N];
for(int i=1;i<N;i++)
first[i]=new Nod();
init();
for(int i=1;i<=n;i++)
{
scanf("%d ",&op);
if(op==1)
{
scanf("%s\n",&str);
len=strlen(str);
if(!verif(first[len],0))
{
updateai(1,len);
insert(first[len],0);
}
}
else
{
scanf("%d",&poz);
int x=pi[searchai(1,poz)];
int si=sumaai(1,poz);
pp=0;
ok=false;
search(first[x],poz-si);
printf("\n");
}
}
}
int main()
{
read();
return 0;
}