Pagini recente » Cod sursa (job #1964770) | Cod sursa (job #435049) | Cod sursa (job #2934751) | Cod sursa (job #40938) | Cod sursa (job #1409503)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("nums.in");
ofstream g("nums.out");
struct trie
{ int val;
trie* fiu[11];
trie()
{ val=0;
for(int i=0;i<=9;i++)
fiu[i]=NULL;
}
};
trie *rad,*nwrad,*el,*depth[100005];
int n,lenact,len,use[100005]; char sir[100005];
void Add(char s[])
{ int i,len=strlen(s);
use[len]++;
if (len>lenact)
{
for(i=lenact+1;i<=len;i++)
{
depth[i-1]=rad;
nwrad = new trie;
nwrad->val=rad->val;
nwrad->fiu[0]=rad;
rad=nwrad;
}
depth[len]=rad;
lenact=len;
}
el=depth[len];
(el->val)++;
trie *aux=el;
for(i=0;i<len;i++)
{ if (el->fiu[s[i]-48]==NULL) el->fiu[s[i]-48]=new trie;
el=el->fiu[s[i]-48];
(el->val)++;
}
}
void Query(int k)
{ int res=0,i,j,num,st;
for(i=1;i<=lenact;i++)
if (use[i]>=k) {res=i; break;}
else k-=use[i];
el=depth[res];
for(i=1;i<=res;i++)
{ if (i>1) st=0; else st=1;
for(j=st;j<=9;j++)
if (el->fiu[j]!=NULL)
{ num=el->fiu[j]->val;
if (num>=k) {g<<j; el=el->fiu[j]; break;}
else k-=num;
}
}
g<<"\n";
}
int main()
{ int i,t,k;
rad=new trie;
f>>n;
for(i=1;i<=n;i++)
{ f>>t;
if (!t) {f>>k; Query(k);}
else {f>>sir; Add(sir);}
}
return 0;
}