Pagini recente » Cod sursa (job #2004649) | Cod sursa (job #1694345) | Cod sursa (job #2079646) | Cod sursa (job #141356) | Cod sursa (job #2166476)
#include <fstream>
#include <string>
#include <algorithm>
#define MAX 100002
using namespace std;
ifstream fi("nums.in");
ofstream fo("nums.out");
int Q,m;
string str;
inline int lsb(int x)
{
return x&(-x);
}
struct elem
{
string s;
int idx;
} e[MAX];
bool cmp(const elem a,const elem b)
{
if (a.s.size()==b.s.size())
return a.s<b.s;
return a.s.size()<b.s.size();
}
struct query
{
int t,kth,poz;
} q[MAX];
bool F[MAX];
int A[MAX];
void update(int poz)
{
for(int i=poz; i<=Q; i+=lsb(i))
A[i]++;
}
int qqquery(int k){
int i=0,p=(1<<16);
while (p)
{
if(i+p<=m && A[i+p]<k)
{
i+=p;
k-=A[i];
}
p>>=1;
}
return i+1;
}
void queries()
{
for(int i=1; i<=Q; i++)
{
if(q[i].t && !F[q[i].poz])
{
update(q[i].poz);
F[q[i].poz]=1;
}
if(!q[i].t)
{
int poz=qqquery(q[i].kth);
fo<<e[poz].s<<"\n";
}
}
}
int main(){
/*------Read Input----*/
fi>>Q;
for(int i=1; i<=Q; i++)
{
fi>>q[i].t;
if(q[i].t)
{
fi>>e[++m].s;
e[m].idx=i;
}
else fi>>q[i].kth;
}
sort(e+1,e+m+1,cmp);
for(int i=1; i<=m; i++){
int j=i;
while(e[i].s==e[j].s && j<=m)
{
q[e[j].idx].poz=i;
j++;
}
i=j-1;
}
queries();
return 0;
}