Pagini recente » Cod sursa (job #3247581) | Cod sursa (job #1417395) | Cod sursa (job #1249713) | Cod sursa (job #3187208) | Cod sursa (job #2061759)
#include <fstream>
#include <string>
#include <map>
#include <algorithm>
#define DIM 100001
using namespace std;
ifstream fi("nums.in");
ofstream fo("nums.out");
int n,nru;
string UP[DIM];
int Q[DIM];
int QQ[DIM];
string QS[DIM];
map<string,int> M;
string C[DIM];
int F[DIM];
int AIB[DIM];
bool compar(string a,string b)
{
if(a.size()==b.size())
return a<b;
return a.size()<b.size();
}
int lsb(int x)
{
return (x^(x-1))&x;
}
void update(int poz)
{
for(int i=poz;i<DIM;i+=lsb(i))
AIB[i]++;
}
string query(int k)
{
int step,pos=0;
step=65536;
for(; step; step>>=1)
if(pos+step<=nru)
if(AIB[pos+step]<k)
{
pos+=step;
k-=AIB[pos];
}
return C[pos+1];
}
int main()
{
fi>>n;
for(int i=1;i<=n;i++)
{
int tip;
fi>>tip;
if(tip == 0)
fi>>QQ[i];
else
{
fi>>QS[i];
Q[i]=1;
UP[++nru]=QS[i];
}
}
sort(UP+1,UP+nru+1,compar);
for(int i=1;i<=nru;i++)
{
M[UP[i]]=i;
C[i]=UP[i];
}
for(int i=1;i<=n;i++)
{
if(Q[i]&&!F[M[QS[i]]])
{
update(M[QS[i]]);
F[M[QS[i]]]=1;
}
else
fo<<query(QQ[i])<<"\n";
}
fi.close();
fo.close();
return 0;
}