Pagini recente » Cod sursa (job #2655267) | Cod sursa (job #770141) | Cod sursa (job #3243011) | Cod sursa (job #1817048) | Cod sursa (job #2166420)
#include <fstream>
#include <string>
#include <algorithm>
#define MAX 100001
using namespace std;
ifstream fi("nums.in");
ofstream fo("nums.out");
int n,total;
string nr[MAX];
int q[MAX];
int qq[MAX],qs[MAX];
int F[MAX];
int A[MAX],M[MAX],ind[MAX];
bool cmp(int x,int y)
{
string a=nr[x],b=nr[y];
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<MAX; i+=lsb(i))
A[i]++;
}
string query(int val)
{
int step,poz=0;
step=65536;
for (; step; step>>=1)
if (poz+step<=total)
if (A[poz+step]<val)
{
poz+=step;
val-=A[poz];
}
return nr[ind[poz+1]];
}
int main()
{
fi>>n;
for (int i=1; i<=n; i++)
{
int tip;
fi>>tip;
if (tip==0)
fi>>qq[i];
else
{
fi>>nr[++total];
q[i]=1;
qs[i]=total;
ind[total]=total;
}
}
sort(ind+1,ind+total+1,cmp);
for (int i=1; i<=total; i++)
M[ind[i]]=i;
for (int i=1; i<=total; i++)
if (nr[ind[i-1]].size()==nr[ind[i]].size() && nr[ind[i]]==nr[ind[i-1]])
M[ind[i]]=M[ind[i-1]];
for (int i=1; i<=n; i++)
{
if (q[i] && !F[M[qs[i]]])
{
update(M[qs[i]]);
F[M[qs[i]]]=1;
}
else if (q[i]==0)
fo<<query(qq[i])<<"\n";
}
fi.close();
fo.close();
return 0;
}