Pagini recente » Cod sursa (job #271970) | Cod sursa (job #881400) | Cod sursa (job #527267) | Cod sursa (job #2891234) | Cod sursa (job #1667349)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
#ifdef INFOARENA
#define cout fout
#endif // INFOARENA
ifstream fin("nums.in");
ofstream fout("nums.out");
/// ////////////////////////////////
void read();
#define nmax 100003
int n,len;
int aib[nmax],ind[nmax],mp[nmax];
string v[nmax];
struct {int tip,pos;} op[nmax];
void update_aib(int pos)
{
for(; pos<nmax; pos+=(pos&(-pos))) ++aib[pos];
}
int query_aib(int k)
{
int step,pos=0;
step=65536;
for(; step>=0; step>>=1)
if(pos+step<=len)
if(aib[pos+step]<k)
{
pos+=step;
k-=aib[pos];
}
return pos+1;
}
bool cmp(int a,int b)
{
if(v[a].size()!=v[b].size()) return v[a].size()<v[b].size();
return v[a]<v[b];
}
int main()
{
int i;
read();
sort(ind+1,ind+len+1,cmp);
for(i=1; i<=len; ++i) mp[ind[i]]=i;
for(i=1;i<=n;++i)
if(op[i].tip==1) update_aib(mp[op[i].pos]);
else cout<<v[ind[query_aib(op[i].pos)]]<<'\n';
return 0;
}
void read()
{
int i;
fin>>n;
for(i=1; i<=n; ++i)
{
fin>>op[i].tip;
if(op[i].tip==1)
{
fin>>v[++len];
ind[len]=len;
op[i].tip=1;
op[i].pos=len;
}
else
{
fin>>op[i].pos;
}
}
}