Pagini recente » Cod sursa (job #1583660) | Cod sursa (job #1057575) | Cod sursa (job #2902816) | Cod sursa (job #2058616) | Cod sursa (job #389879)
Cod sursa(job #389879)
#include<cstdio>
#include<cstring>
using namespace std;
const char iname[]="nums.in";
const char oname[]="nums.out";
const int maxn=100005;
const int INF=(1<<31)-1;
struct trie
{
trie* nodes[10];
int v;
trie()
{
memset(nodes,0,sizeof(nodes));
v=0;
}
}* a[maxn];
int i,j,n,k,m,maxt;
char s[maxn];
void update(char *s,int n)
{
if(a[n]==0)
a[n]=new trie();
trie *i;
for(i=a[n];*s>='0'&&*s<='9';++s)
{
++i->v;
if(i->nodes[*s-'0']==0)
i->nodes[*s-'0']=new trie();
i=i->nodes[*s-'0'];
}
i->v=INF;
}
void query(int k)
{
int i;
for(i=1;i<=maxt;++i)
if(a[i])
if(a[i]->v<k)
k-=a[i]->v;
else
break;
trie *j;
for(j=a[i];j->v!=INF;)
{
for(i=0;i<10;++i)
if(j->nodes[i])
if(j->nodes[i]->v<k)
k-=j->nodes[i]->v;
else
{
j=j->nodes[i],printf("%d",i);
break;
}
}
printf("\n");
}
int main()
{
freopen(iname,"r",stdin);
freopen(oname,"w",stdout);
scanf("%d\n",&n);
for(i=1;i<=n;++i)
{
fgets(s,sizeof(s),stdin);
if(s[0]=='1')
{
m=strlen(s);
if(s[m-1]=='\n')
s[--m]=0;
update(s+2,m-2);
if(m-2>maxt)
maxt=m-2;
}
else
sscanf(s+2,"%d",&k),query(k);
}
fclose(stdin);
fclose(stdout);
return 0;
}